aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.Graphics.Shader/Instructions
diff options
context:
space:
mode:
Diffstat (limited to 'Ryujinx.Graphics.Shader/Instructions')
-rw-r--r--Ryujinx.Graphics.Shader/Instructions/InstEmitMemory.cs25
1 files changed, 25 insertions, 0 deletions
diff --git a/Ryujinx.Graphics.Shader/Instructions/InstEmitMemory.cs b/Ryujinx.Graphics.Shader/Instructions/InstEmitMemory.cs
index 56688161..866df56d 100644
--- a/Ryujinx.Graphics.Shader/Instructions/InstEmitMemory.cs
+++ b/Ryujinx.Graphics.Shader/Instructions/InstEmitMemory.cs
@@ -77,6 +77,17 @@ namespace Ryujinx.Graphics.Shader.Instructions
context.Copy(GetDest(context), res);
}
+ public static void Bar(EmitterContext context)
+ {
+ OpCodeBarrier op = (OpCodeBarrier)context.CurrOp;
+
+ // TODO: Support other modes.
+ if (op.Mode == BarrierMode.Sync)
+ {
+ context.Barrier();
+ }
+ }
+
public static void Ipa(EmitterContext context)
{
OpCodeIpa op = (OpCodeIpa)context.CurrOp;
@@ -162,6 +173,20 @@ namespace Ryujinx.Graphics.Shader.Instructions
EmitLoad(context, MemoryRegion.Shared);
}
+ public static void Membar(EmitterContext context)
+ {
+ OpCodeMemoryBarrier op = (OpCodeMemoryBarrier)context.CurrOp;
+
+ if (op.Level == BarrierLevel.Cta)
+ {
+ context.GroupMemoryBarrier();
+ }
+ else
+ {
+ context.MemoryBarrier();
+ }
+ }
+
public static void Out(EmitterContext context)
{
OpCode op = context.CurrOp;