summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--source/slang/hlsl.meta.slang3
-rw-r--r--tests/spirv/barrier.slang14
2 files changed, 16 insertions, 1 deletions
diff --git a/source/slang/hlsl.meta.slang b/source/slang/hlsl.meta.slang
index 972702170..cd6de61b5 100644
--- a/source/slang/hlsl.meta.slang
+++ b/source/slang/hlsl.meta.slang
@@ -5105,11 +5105,12 @@ void __subgroupBarrier()
}
}
+__glsl_extension(GL_KHR_memory_scope_semantics)
void GroupMemoryBarrierWithGroupSync()
{
__target_switch
{
- case glsl: __intrinsic_asm "barrier";
+ case glsl: __intrinsic_asm "controlBarrier(gl_ScopeWorkgroup, gl_ScopeWorkgroup, gl_StorageSemanticsShared, gl_SemanticsAcquireRelease)";
case hlsl: __intrinsic_asm "GroupMemoryBarrierWithGroupSync";
case cuda: __intrinsic_asm "__syncthreads()";
case spirv:
diff --git a/tests/spirv/barrier.slang b/tests/spirv/barrier.slang
new file mode 100644
index 000000000..769bf9b7e
--- /dev/null
+++ b/tests/spirv/barrier.slang
@@ -0,0 +1,14 @@
+//TEST:SIMPLE(filecheck=CHECK):-target spirv -emit-spirv-directly -O0
+//TEST:SIMPLE(filecheck=CHECK):-target spirv -emit-spirv-via-glsl -entry main -stage compute -O0
+
+RWStructuredBuffer<float> output;
+
+[numthreads(1,1,1)]
+[shader("compute")]
+void main()
+{
+ output[0] = 0;
+ // CHECK: OpControlBarrier %uint_2 %uint_2 %uint_264
+ GroupMemoryBarrierWithGroupSync();
+ output[1] = 0;
+} \ No newline at end of file