aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/Operation.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Graphics.Shader/IntermediateRepresentation/Operation.cs')
-rw-r--r--src/Ryujinx.Graphics.Shader/IntermediateRepresentation/Operation.cs30
1 files changed, 30 insertions, 0 deletions
diff --git a/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/Operation.cs b/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/Operation.cs
index d502a9b6..425cfd90 100644
--- a/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/Operation.cs
+++ b/src/Ryujinx.Graphics.Shader/IntermediateRepresentation/Operation.cs
@@ -255,5 +255,35 @@ namespace Ryujinx.Graphics.Shader.IntermediateRepresentation
_sources = new Operand[] { source };
}
+
+ public void TurnDoubleIntoFloat()
+ {
+ if ((Inst & ~Instruction.Mask) == Instruction.FP64)
+ {
+ Inst = (Inst & Instruction.Mask) | Instruction.FP32;
+ }
+ else
+ {
+ switch (Inst)
+ {
+ case Instruction.ConvertFP32ToFP64:
+ case Instruction.ConvertFP64ToFP32:
+ Inst = Instruction.Copy;
+ break;
+ case Instruction.ConvertFP64ToS32:
+ Inst = Instruction.ConvertFP32ToS32;
+ break;
+ case Instruction.ConvertFP64ToU32:
+ Inst = Instruction.ConvertFP32ToU32;
+ break;
+ case Instruction.ConvertS32ToFP64:
+ Inst = Instruction.ConvertS32ToFP32;
+ break;
+ case Instruction.ConvertU32ToFP64:
+ Inst = Instruction.ConvertU32ToFP32;
+ break;
+ }
+ }
+ }
}
} \ No newline at end of file