forked from Mirror/Ryujinx
Support CC on FSET shader instruction, fix CC on ISET.BF shader instruction
This commit is contained in:
parent
9d7a142a48
commit
82957fa96b
3 changed files with 24 additions and 14 deletions
|
@ -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);
|
||||
}
|
||||
|
||||
// TODO: X
|
||||
}
|
||||
|
|
|
@ -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)));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -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;
|
||||
|
|
Loading…
Reference in a new issue