Fix ZN flags set for shader instructions using RZ.CC dest (#2147)

* Fix ZN flags set for shader instructions using RZ.CC dest

* Shader cache version bump and nits
This commit is contained in:
gdkchan 2021-03-27 18:59:05 -03:00 committed by GitHub
parent e60bae1a94
commit a0b4799f19
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
3 changed files with 9 additions and 14 deletions

View file

@ -35,7 +35,7 @@ namespace Ryujinx.Graphics.Gpu.Shader
/// <summary> /// <summary>
/// Version of the codegen (to be changed when codegen or guest format change). /// Version of the codegen (to be changed when codegen or guest format change).
/// </summary> /// </summary>
private const ulong ShaderCodeGenVersion = 2088; private const ulong ShaderCodeGenVersion = 2147;
// Progress reporting helpers // Progress reporting helpers
private volatile int _shaderCount; private volatile int _shaderCount;

View file

@ -276,12 +276,11 @@ namespace Ryujinx.Graphics.Shader.Instructions
: context.IMaximumU32(srcA, srcB); : context.IMaximumU32(srcA, srcB);
Operand pred = GetPredicate39(context); Operand pred = GetPredicate39(context);
Operand res = context.ConditionalSelect(pred, resMin, resMax);
Operand dest = GetDest(context); context.Copy(GetDest(context), res);
context.Copy(dest, context.ConditionalSelect(pred, resMin, resMax)); SetZnFlags(context, res, op.SetCondCode);
SetZnFlags(context, dest, op.SetCondCode);
// TODO: X flags. // TODO: X flags.
} }
@ -461,11 +460,9 @@ namespace Ryujinx.Graphics.Shader.Instructions
EmitLopPredWrite(context, op, res, (ConditionalOperation)context.CurrOp.RawOpCode.Extract(44, 2)); EmitLopPredWrite(context, op, res, (ConditionalOperation)context.CurrOp.RawOpCode.Extract(44, 2));
Operand dest = GetDest(context); context.Copy(GetDest(context), res);
context.Copy(dest, res); SetZnFlags(context, res, op.SetCondCode, op.Extended);
SetZnFlags(context, dest, op.SetCondCode, op.Extended);
} }
public static void Lop3(EmitterContext context) public static void Lop3(EmitterContext context)
@ -489,11 +486,9 @@ namespace Ryujinx.Graphics.Shader.Instructions
EmitLopPredWrite(context, op, res, (ConditionalOperation)context.CurrOp.RawOpCode.Extract(36, 2)); EmitLopPredWrite(context, op, res, (ConditionalOperation)context.CurrOp.RawOpCode.Extract(36, 2));
} }
Operand dest = GetDest(context); context.Copy(GetDest(context), res);
context.Copy(dest, res); SetZnFlags(context, res, op.SetCondCode, op.Extended);
SetZnFlags(context, dest, op.SetCondCode, op.Extended);
} }
public static void Popc(EmitterContext context) public static void Popc(EmitterContext context)

View file

@ -91,7 +91,7 @@ namespace Ryujinx.Graphics.Shader.Translation
public void PrepareForReturn() public void PrepareForReturn()
{ {
if (Config.Stage == ShaderStage.Fragment) if (!IsNonMain && Config.Stage == ShaderStage.Fragment)
{ {
if (Config.OmapDepth) if (Config.OmapDepth)
{ {