diff options
| author | gdkchan <gab.dark.100@gmail.com> | 2022-01-10 12:08:00 -0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2022-01-10 12:08:00 -0300 |
| commit | 7f6b3d234a0dd82866e89930f05c520aca94946e (patch) | |
| tree | 49459142740eed719d431d9dc9ae37b0ff472ee8 /Ryujinx.Graphics.Shader/Instructions/InstEmitFlowControl.cs | |
| parent | 952c6e4d454082da900a447e6bd1deb272c150c2 (diff) | |
Implement IMUL, PCNT and CONT shader instructions, fix FFMA32I and HFMA32I (#2972)
* Implement IMUL shader instruction
* Implement PCNT/CONT instruction and fix FFMA32I
* Add HFMA232I to the table
* Shader cache version bump
* No Rc on Ffma32i
Diffstat (limited to 'Ryujinx.Graphics.Shader/Instructions/InstEmitFlowControl.cs')
| -rw-r--r-- | Ryujinx.Graphics.Shader/Instructions/InstEmitFlowControl.cs | 26 |
1 files changed, 20 insertions, 6 deletions
diff --git a/Ryujinx.Graphics.Shader/Instructions/InstEmitFlowControl.cs b/Ryujinx.Graphics.Shader/Instructions/InstEmitFlowControl.cs index da34c1be..3cb8fe72 100644 --- a/Ryujinx.Graphics.Shader/Instructions/InstEmitFlowControl.cs +++ b/Ryujinx.Graphics.Shader/Instructions/InstEmitFlowControl.cs @@ -22,7 +22,7 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstBrk op = context.GetOp<InstBrk>(); - EmitBrkOrSync(context); + EmitBrkContSync(context); } public static void Brx(EmitterContext context) @@ -87,6 +87,13 @@ namespace Ryujinx.Graphics.Shader.Instructions } } + public static void Cont(EmitterContext context) + { + InstCont op = context.GetOp<InstCont>(); + + EmitBrkContSync(context); + } + public static void Exit(EmitterContext context) { InstExit op = context.GetOp<InstExit>(); @@ -116,7 +123,14 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstPbk op = context.GetOp<InstPbk>(); - EmitPbkOrSsy(context); + EmitPbkPcntSsy(context); + } + + public static void Pcnt(EmitterContext context) + { + InstPcnt op = context.GetOp<InstPcnt>(); + + EmitPbkPcntSsy(context); } public static void Ret(EmitterContext context) @@ -137,17 +151,17 @@ namespace Ryujinx.Graphics.Shader.Instructions { InstSsy op = context.GetOp<InstSsy>(); - EmitPbkOrSsy(context); + EmitPbkPcntSsy(context); } public static void Sync(EmitterContext context) { InstSync op = context.GetOp<InstSync>(); - EmitBrkOrSync(context); + EmitBrkContSync(context); } - private static void EmitPbkOrSsy(EmitterContext context) + private static void EmitPbkPcntSsy(EmitterContext context) { var consumers = context.CurrBlock.PushOpCodes.First(x => x.Op.Address == context.CurrOp.Address).Consumers; @@ -162,7 +176,7 @@ namespace Ryujinx.Graphics.Shader.Instructions } } - private static void EmitBrkOrSync(EmitterContext context) + private static void EmitBrkContSync(EmitterContext context) { var targets = context.CurrBlock.SyncTargets; |
