Просмотр исходного кода

Fix negation of HADD2 constant buffer source (#1116)

gdkchan 6 лет назад
Родитель
Сommit
92cc37e365

+ 1 - 1
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];
 

+ 6 - 1
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);