diff --git a/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs b/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs
index 366c93df2..20e1c9f84 100644
--- a/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs
+++ b/Ryujinx.Graphics.Gpu/Shader/ShaderCache.cs
@@ -34,7 +34,7 @@ namespace Ryujinx.Graphics.Gpu.Shader
///
/// Version of the codegen (to be changed when codegen or guest format change).
///
- private const ulong ShaderCodeGenVersion = 1901;
+ private const ulong ShaderCodeGenVersion = 1910;
///
/// Creates a new instance of the shader cache.
diff --git a/Ryujinx.Graphics.Shader/Decoders/OpCodeLop.cs b/Ryujinx.Graphics.Shader/Decoders/OpCodeLop.cs
index 45399de0d..c774523ba 100644
--- a/Ryujinx.Graphics.Shader/Decoders/OpCodeLop.cs
+++ b/Ryujinx.Graphics.Shader/Decoders/OpCodeLop.cs
@@ -9,8 +9,6 @@ namespace Ryujinx.Graphics.Shader.Decoders
public LogicalOperation LogicalOp { get; }
- public ConditionalOperation CondOp { get; }
-
public Register Predicate48 { get; }
public new static OpCode Create(InstEmitter emitter, ulong address, long opCode) => new OpCodeLop(emitter, address, opCode);
@@ -22,8 +20,6 @@ namespace Ryujinx.Graphics.Shader.Decoders
LogicalOp = (LogicalOperation)opCode.Extract(41, 2);
- CondOp = (ConditionalOperation)opCode.Extract(44, 2);
-
Predicate48 = new Register(opCode.Extract(48, 3), RegisterType.Predicate);
}
}
diff --git a/Ryujinx.Graphics.Shader/Instructions/InstEmitAlu.cs b/Ryujinx.Graphics.Shader/Instructions/InstEmitAlu.cs
index 64ac0eb78..37c17ecc4 100644
--- a/Ryujinx.Graphics.Shader/Instructions/InstEmitAlu.cs
+++ b/Ryujinx.Graphics.Shader/Instructions/InstEmitAlu.cs
@@ -459,7 +459,7 @@ namespace Ryujinx.Graphics.Shader.Instructions
case LogicalOperation.ExclusiveOr: res = context.BitwiseExclusiveOr(srcA, srcB); break;
}
- EmitLopPredWrite(context, op, res);
+ EmitLopPredWrite(context, op, res, (ConditionalOperation)context.CurrOp.RawOpCode.Extract(44, 2));
Operand dest = GetDest(context);
@@ -486,7 +486,7 @@ namespace Ryujinx.Graphics.Shader.Instructions
if (regVariant)
{
- EmitLopPredWrite(context, op, res);
+ EmitLopPredWrite(context, op, res, (ConditionalOperation)context.CurrOp.RawOpCode.Extract(36, 2));
}
Operand dest = GetDest(context);
@@ -917,21 +917,21 @@ namespace Ryujinx.Graphics.Shader.Instructions
return res;
}
- private static void EmitLopPredWrite(EmitterContext context, IOpCodeLop op, Operand result)
+ private static void EmitLopPredWrite(EmitterContext context, IOpCodeLop op, Operand result, ConditionalOperation condOp)
{
if (op is OpCodeLop opLop && !opLop.Predicate48.IsPT)
{
Operand pRes;
- if (opLop.CondOp == ConditionalOperation.False)
+ if (condOp == ConditionalOperation.False)
{
pRes = Const(IrConsts.False);
}
- else if (opLop.CondOp == ConditionalOperation.True)
+ else if (condOp == ConditionalOperation.True)
{
pRes = Const(IrConsts.True);
}
- else if (opLop.CondOp == ConditionalOperation.Zero)
+ else if (condOp == ConditionalOperation.Zero)
{
pRes = context.ICompareEqual(result, Const(0));
}