From d599fba711146e2b92a1fc6be19b0f5f83abab58 Mon Sep 17 00:00:00 2001 From: gdkchan Date: Mon, 30 Mar 2020 07:04:00 -0300 Subject: Implement FCMP shader instruction (#1067) --- Ryujinx.Graphics.Shader/Instructions/InstEmitFArith.cs | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+) (limited to 'Ryujinx.Graphics.Shader/Instructions') diff --git a/Ryujinx.Graphics.Shader/Instructions/InstEmitFArith.cs b/Ryujinx.Graphics.Shader/Instructions/InstEmitFArith.cs index fa5c684c..c171a986 100644 --- a/Ryujinx.Graphics.Shader/Instructions/InstEmitFArith.cs +++ b/Ryujinx.Graphics.Shader/Instructions/InstEmitFArith.cs @@ -16,6 +16,24 @@ namespace Ryujinx.Graphics.Shader.Instructions public static void Dmul(EmitterContext context) => EmitFPMultiply(context, Instruction.FP64); public static void Fadd(EmitterContext context) => EmitFPAdd(context, Instruction.FP32); + + public static void Fcmp(EmitterContext context) + { + OpCode op = context.CurrOp; + + Condition cmpOp = (Condition)op.RawOpCode.Extract(48, 4); + + Operand srcA = GetSrcA(context); + Operand srcB = GetSrcB(context); + Operand srcC = GetSrcC(context); + + Operand cmpRes = GetFPComparison(context, cmpOp, srcC, ConstF(0)); + + Operand res = context.ConditionalSelect(cmpRes, srcA, srcB); + + context.Copy(GetDest(context), res); + } + public static void Ffma(EmitterContext context) => EmitFPFma(context, Instruction.FP32); public static void Ffma32i(EmitterContext context) -- cgit v1.2.3