aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader/Instructions/InstEmitMultifunction.cs
diff options
context:
space:
mode:
authorgdkchan <gab.dark.100@gmail.com>2021-12-08 17:54:12 -0300
committerGitHub <noreply@github.com>2021-12-08 17:54:12 -0300
commit650cc41c02e4b7305750e23f855cdc7ce533a1b2 (patch)
treecd4f22a5a2e039a325c5c58ff95fa133ea57977f /Ryujinx.Graphics.Shader/Instructions/InstEmitMultifunction.cs
parenta0aa87366c25611b1b0380e94d4edc8f9f2338e2 (diff)
Implement remaining shader double-precision instructions (#2845)
* Implement remaining shader double-precision instructions * Shader cache version bump
Diffstat (limited to 'Ryujinx.Graphics.Shader/Instructions/InstEmitMultifunction.cs')
-rw-r--r--Ryujinx.Graphics.Shader/Instructions/InstEmitMultifunction.cs14
1 files changed, 13 insertions, 1 deletions
diff --git a/Ryujinx.Graphics.Shader/Instructions/InstEmitMultifunction.cs b/Ryujinx.Graphics.Shader/Instructions/InstEmitMultifunction.cs
index 465024eb..1ea7d321 100644
--- a/Ryujinx.Graphics.Shader/Instructions/InstEmitMultifunction.cs
+++ b/Ryujinx.Graphics.Shader/Instructions/InstEmitMultifunction.cs
@@ -61,11 +61,23 @@ namespace Ryujinx.Graphics.Shader.Instructions
res = context.FPReciprocalSquareRoot(res);
break;
+ case MufuOp.Rcp64h:
+ res = context.PackDouble2x32(OperandHelper.Const(0), res);
+ res = context.UnpackDouble2x32High(context.FPReciprocal(res, Instruction.FP64));
+ break;
+
+ case MufuOp.Rsq64h:
+ res = context.PackDouble2x32(OperandHelper.Const(0), res);
+ res = context.UnpackDouble2x32High(context.FPReciprocalSquareRoot(res, Instruction.FP64));
+ break;
+
case MufuOp.Sqrt:
res = context.FPSquareRoot(res);
break;
- default: /* TODO */ break;
+ default:
+ context.Config.GpuAccessor.Log($"Invalid MUFU operation \"{op.MufuOp}\".");
+ break;
}
context.Copy(GetDest(op.Dest), context.FPSaturate(res, op.Sat));