Add support for shader atomic min/max (S32) (#1948)
This commit is contained in:
parent
c19cfca183
commit
e453ba69f4
11 changed files with 103 additions and 21 deletions
|
@ -5,12 +5,14 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
|
|||
[Flags]
|
||||
enum HelperFunctionsMask
|
||||
{
|
||||
MultiplyHighS32 = 1 << 0,
|
||||
MultiplyHighU32 = 1 << 1,
|
||||
Shuffle = 1 << 2,
|
||||
ShuffleDown = 1 << 3,
|
||||
ShuffleUp = 1 << 4,
|
||||
ShuffleXor = 1 << 5,
|
||||
SwizzleAdd = 1 << 6
|
||||
AtomicMinMaxS32Shared = 1 << 0,
|
||||
AtomicMinMaxS32Storage = 1 << 1,
|
||||
MultiplyHighS32 = 1 << 2,
|
||||
MultiplyHighU32 = 1 << 3,
|
||||
Shuffle = 1 << 4,
|
||||
ShuffleDown = 1 << 5,
|
||||
ShuffleUp = 1 << 6,
|
||||
ShuffleXor = 1 << 7,
|
||||
SwizzleAdd = 1 << 8
|
||||
}
|
||||
}
|
|
@ -244,6 +244,14 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
|
|||
// decide which helper functions are needed on the final generated code.
|
||||
switch (operation.Inst)
|
||||
{
|
||||
case Instruction.AtomicMaxS32 | Instruction.MrShared:
|
||||
case Instruction.AtomicMinS32 | Instruction.MrShared:
|
||||
context.Info.HelperFunctionsMask |= HelperFunctionsMask.AtomicMinMaxS32Shared;
|
||||
break;
|
||||
case Instruction.AtomicMaxS32 | Instruction.MrStorage:
|
||||
case Instruction.AtomicMinS32 | Instruction.MrStorage:
|
||||
context.Info.HelperFunctionsMask |= HelperFunctionsMask.AtomicMinMaxS32Storage;
|
||||
break;
|
||||
case Instruction.MultiplyHighS32:
|
||||
context.Info.HelperFunctionsMask |= HelperFunctionsMask.MultiplyHighS32;
|
||||
break;
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue