summaryrefslogtreecommitdiffstats
path: root/tests/spirv/atomic-image-access.slang
diff options
context:
space:
mode:
Diffstat (limited to 'tests/spirv/atomic-image-access.slang')
-rw-r--r--tests/spirv/atomic-image-access.slang24
1 files changed, 24 insertions, 0 deletions
diff --git a/tests/spirv/atomic-image-access.slang b/tests/spirv/atomic-image-access.slang
new file mode 100644
index 000000000..1fc7cd28f
--- /dev/null
+++ b/tests/spirv/atomic-image-access.slang
@@ -0,0 +1,24 @@
+// atomic-image-access.slang
+//TEST:SIMPLE(filecheck=CHECK): -target spirv -entry computeMain -stage compute -emit-spirv-directly
+
+// The executable test is disabled because it somehow doesn't work. Might be a gfx issue.
+//TEST_DISABLED(compute, vulkan):COMPARE_COMPUTE_EX(filecheck-buffer=BUFFER):-vk -compute -output-using-type
+
+// Test direct SPIR-V emit on image atomics.
+
+//TEST_INPUT:set resultBuffer = out ubuffer(data=[0 0 0 0], stride=4)
+RWStructuredBuffer<uint> resultBuffer;
+
+// TEST_INPUT: set tex = RWTexture2D(format=R32_UINT, size=4, content=zero, mipMaps = 1)
+[vk::image_format("r32ui")]
+RWTexture2D<uint> tex;
+
+[numthreads(1,1,1)]
+void computeMain(uint3 dispatchThreadID : SV_DispatchThreadID)
+{
+ // CHECK: OpImageTexelPointer
+ InterlockedAdd(tex[uint2(0, 0)], 1);
+ uint oldVal;
+ InterlockedAdd(tex[uint2(0, 0)], 1, oldVal);
+ resultBuffer[0] = oldVal;
+}