aboutsummaryrefslogtreecommitdiff
path: root/src/Ryujinx.Graphics.Shader/Instructions/InstEmitBarrier.cs
diff options
context:
space:
mode:
Diffstat (limited to 'src/Ryujinx.Graphics.Shader/Instructions/InstEmitBarrier.cs')
-rw-r--r--src/Ryujinx.Graphics.Shader/Instructions/InstEmitBarrier.cs44
1 files changed, 44 insertions, 0 deletions
diff --git a/src/Ryujinx.Graphics.Shader/Instructions/InstEmitBarrier.cs b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitBarrier.cs
new file mode 100644
index 00000000..f3114c6e
--- /dev/null
+++ b/src/Ryujinx.Graphics.Shader/Instructions/InstEmitBarrier.cs
@@ -0,0 +1,44 @@
+using Ryujinx.Graphics.Shader.Decoders;
+using Ryujinx.Graphics.Shader.Translation;
+
+namespace Ryujinx.Graphics.Shader.Instructions
+{
+ static partial class InstEmit
+ {
+ public static void Bar(EmitterContext context)
+ {
+ InstBar op = context.GetOp<InstBar>();
+
+ // TODO: Support other modes.
+ if (op.BarOp == BarOp.Sync)
+ {
+ context.Barrier();
+ }
+ else
+ {
+ context.Config.GpuAccessor.Log($"Invalid barrier mode: {op.BarOp}.");
+ }
+ }
+
+ public static void Depbar(EmitterContext context)
+ {
+ InstDepbar op = context.GetOp<InstDepbar>();
+
+ // No operation.
+ }
+
+ public static void Membar(EmitterContext context)
+ {
+ InstMembar op = context.GetOp<InstMembar>();
+
+ if (op.Membar == Decoders.Membar.Cta)
+ {
+ context.GroupMemoryBarrier();
+ }
+ else
+ {
+ context.MemoryBarrier();
+ }
+ }
+ }
+} \ No newline at end of file