aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ryujinx.Graphics.Shader/Instructions/InstEmitFArith.cs2
-rw-r--r--Ryujinx.Graphics.Shader/Instructions/InstEmitHelper.cs7
2 files changed, 7 insertions, 2 deletions
diff --git a/Ryujinx.Graphics.Shader/Instructions/InstEmitFArith.cs b/Ryujinx.Graphics.Shader/Instructions/InstEmitFArith.cs
index c171a986..1da5158f 100644
--- a/Ryujinx.Graphics.Shader/Instructions/InstEmitFArith.cs
+++ b/Ryujinx.Graphics.Shader/Instructions/InstEmitFArith.cs
@@ -203,7 +203,7 @@ namespace Ryujinx.Graphics.Shader.Instructions
bool saturate = op.RawOpCode.Extract(op is IOpCodeReg ? 32 : 52);
Operand[] srcA = GetHalfSrcA(context, isAdd);
- Operand[] srcB = GetHalfSrcB(context);
+ Operand[] srcB = GetHalfSrcB(context, !isAdd);
Operand[] res = new Operand[2];
diff --git a/Ryujinx.Graphics.Shader/Instructions/InstEmitHelper.cs b/Ryujinx.Graphics.Shader/Instructions/InstEmitHelper.cs
index 09d90e15..352d16c0 100644
--- a/Ryujinx.Graphics.Shader/Instructions/InstEmitHelper.cs
+++ b/Ryujinx.Graphics.Shader/Instructions/InstEmitHelper.cs
@@ -173,7 +173,7 @@ namespace Ryujinx.Graphics.Shader.Instructions
return FPAbsNeg(context, operands, absoluteA, negateA);
}
- public static Operand[] GetHalfSrcB(EmitterContext context)
+ public static Operand[] GetHalfSrcB(EmitterContext context, bool isMul = false)
{
OpCode op = context.CurrOp;
@@ -193,6 +193,11 @@ namespace Ryujinx.Graphics.Shader.Instructions
swizzle = FPHalfSwizzle.FP32;
absoluteB = op.RawOpCode.Extract(54);
+
+ if (!isMul)
+ {
+ negateB = op.RawOpCode.Extract(56);
+ }
}
Operand[] operands = GetHalfUnpacked(context, GetSrcB(context), swizzle);