aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader/StructuredIr
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.Shader/StructuredIr')
-rw-r--r--Ryujinx.Graphics.Shader/StructuredIr/HelperFunctionsMask.cs12
-rw-r--r--Ryujinx.Graphics.Shader/StructuredIr/InstructionInfo.cs2
-rw-r--r--Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs6
3 files changed, 15 insertions, 5 deletions
diff --git a/Ryujinx.Graphics.Shader/StructuredIr/HelperFunctionsMask.cs b/Ryujinx.Graphics.Shader/StructuredIr/HelperFunctionsMask.cs
index e2eee78d..53367fce 100644
--- a/Ryujinx.Graphics.Shader/StructuredIr/HelperFunctionsMask.cs
+++ b/Ryujinx.Graphics.Shader/StructuredIr/HelperFunctionsMask.cs
@@ -5,10 +5,12 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
[Flags]
enum HelperFunctionsMask
{
- Shuffle = 1 << 0,
- ShuffleDown = 1 << 1,
- ShuffleUp = 1 << 2,
- ShuffleXor = 1 << 3,
- SwizzleAdd = 1 << 4
+ MultiplyHighS32 = 1 << 0,
+ MultiplyHighU32 = 1 << 1,
+ Shuffle = 1 << 2,
+ ShuffleDown = 1 << 3,
+ ShuffleUp = 1 << 4,
+ ShuffleXor = 1 << 5,
+ SwizzleAdd = 1 << 6
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics.Shader/StructuredIr/InstructionInfo.cs b/Ryujinx.Graphics.Shader/StructuredIr/InstructionInfo.cs
index d1874f50..9614b659 100644
--- a/Ryujinx.Graphics.Shader/StructuredIr/InstructionInfo.cs
+++ b/Ryujinx.Graphics.Shader/StructuredIr/InstructionInfo.cs
@@ -102,6 +102,8 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
Add(Instruction.Minimum, VariableType.Scalar, VariableType.Scalar, VariableType.Scalar);
Add(Instruction.MinimumU32, VariableType.U32, VariableType.U32, VariableType.U32);
Add(Instruction.Multiply, VariableType.Scalar, VariableType.Scalar, VariableType.Scalar);
+ Add(Instruction.MultiplyHighS32, VariableType.S32, VariableType.S32, VariableType.S32);
+ Add(Instruction.MultiplyHighU32, VariableType.U32, VariableType.U32, VariableType.U32);
Add(Instruction.Negate, VariableType.Scalar, VariableType.Scalar);
Add(Instruction.PackHalf2x16, VariableType.U32, VariableType.F32, VariableType.F32);
Add(Instruction.ReciprocalSquareRoot, VariableType.Scalar, VariableType.Scalar);
diff --git a/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs b/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs
index a85fbae3..504dc386 100644
--- a/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs
+++ b/Ryujinx.Graphics.Shader/StructuredIr/StructuredProgram.cs
@@ -171,6 +171,12 @@ namespace Ryujinx.Graphics.Shader.StructuredIr
// decide which helper functions are needed on the final generated code.
switch (operation.Inst)
{
+ case Instruction.MultiplyHighS32:
+ context.Info.HelperFunctionsMask |= HelperFunctionsMask.MultiplyHighS32;
+ break;
+ case Instruction.MultiplyHighU32:
+ context.Info.HelperFunctionsMask |= HelperFunctionsMask.MultiplyHighU32;
+ break;
case Instruction.Shuffle:
context.Info.HelperFunctionsMask |= HelperFunctionsMask.Shuffle;
break;