aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Ryujinx.Graphics.Shader/Instructions/InstEmitAlu.cs10
-rw-r--r--Ryujinx.Graphics.Shader/Instructions/InstEmitAluHelper.cs9
-rw-r--r--Ryujinx.Graphics.Shader/Instructions/InstEmitFArith.cs19
3 files changed, 24 insertions, 14 deletions
diff --git a/Ryujinx.Graphics.Shader/Instructions/InstEmitAlu.cs b/Ryujinx.Graphics.Shader/Instructions/InstEmitAlu.cs
index 0cb854e9..77df3d8d 100644
--- a/Ryujinx.Graphics.Shader/Instructions/InstEmitAlu.cs
+++ b/Ryujinx.Graphics.Shader/Instructions/InstEmitAlu.cs
@@ -327,14 +327,18 @@ namespace Ryujinx.Graphics.Shader.Instructions
if (boolFloat)
{
- context.Copy(dest, context.ConditionalSelect(res, ConstF(1), Const(0)));
+ res = context.ConditionalSelect(res, ConstF(1), Const(0));
+
+ context.Copy(dest, res);
+
+ SetFPZnFlags(context, res, op.SetCondCode);
}
else
{
context.Copy(dest, res);
- }
- SetZnFlags(context, res, op.SetCondCode, op.Extended);
+ SetZnFlags(context, res, op.SetCondCode, op.Extended);
+ }
// TODO: X
}
diff --git a/Ryujinx.Graphics.Shader/Instructions/InstEmitAluHelper.cs b/Ryujinx.Graphics.Shader/Instructions/InstEmitAluHelper.cs
index e283c3b7..da5c7fed 100644
--- a/Ryujinx.Graphics.Shader/Instructions/InstEmitAluHelper.cs
+++ b/Ryujinx.Graphics.Shader/Instructions/InstEmitAluHelper.cs
@@ -84,5 +84,14 @@ namespace Ryujinx.Graphics.Shader.Instructions
context.Copy(GetNF(context), context.ICompareLess(dest, Const(0)));
}
+
+ public static void SetFPZnFlags(EmitterContext context, Operand dest, bool setCC)
+ {
+ if (setCC)
+ {
+ context.Copy(GetZF(context), context.FPCompareEqual(dest, ConstF(0)));
+ context.Copy(GetNF(context), context.FPCompareLess (dest, ConstF(0)));
+ }
+ }
}
} \ No newline at end of file
diff --git a/Ryujinx.Graphics.Shader/Instructions/InstEmitFArith.cs b/Ryujinx.Graphics.Shader/Instructions/InstEmitFArith.cs
index 63d1efcb..23f40d46 100644
--- a/Ryujinx.Graphics.Shader/Instructions/InstEmitFArith.cs
+++ b/Ryujinx.Graphics.Shader/Instructions/InstEmitFArith.cs
@@ -163,14 +163,20 @@ namespace Ryujinx.Graphics.Shader.Instructions
if (boolFloat)
{
- context.Copy(dest, context.ConditionalSelect(res, ConstF(1), Const(0)));
+ res = context.ConditionalSelect(res, ConstF(1), Const(0));
+
+ context.Copy(dest, res);
+
+ SetFPZnFlags(context, res, op.SetCondCode);
}
else
{
context.Copy(dest, res);
+
+ SetZnFlags(context, res, op.SetCondCode, op.Extended);
}
- // TODO: CC, X
+ // TODO: X
}
public static void Fsetp(EmitterContext context)
@@ -453,15 +459,6 @@ namespace Ryujinx.Graphics.Shader.Instructions
return res;
}
- private static void SetFPZnFlags(EmitterContext context, Operand dest, bool setCC)
- {
- if (setCC)
- {
- context.Copy(GetZF(context), context.FPCompareEqual(dest, ConstF(0)));
- context.Copy(GetNF(context), context.FPCompareLess (dest, ConstF(0)));
- }
- }
-
private static Operand[] GetHfmaSrcA(EmitterContext context)
{
IOpCodeHfma op = (IOpCodeHfma)context.CurrOp;