summaryrefslogtreecommitdiff
path: root/tests/ir/loop.slang
diff options
context:
space:
mode:
Diffstat (limited to 'tests/ir/loop.slang')
-rw-r--r--tests/ir/loop.slang33
1 files changed, 33 insertions, 0 deletions
diff --git a/tests/ir/loop.slang b/tests/ir/loop.slang
new file mode 100644
index 000000000..d637e4536
--- /dev/null
+++ b/tests/ir/loop.slang
@@ -0,0 +1,33 @@
+//TEST:SIMPLE:-target slang-ir-assembly -profile cs_4_0 -entry main
+
+#define GROUP_THREAD_COUNT 64
+
+StructuredBuffer<float4> input;
+RWStructuredBuffer<float4> output;
+
+groupshared float4 s[GROUP_THREAD_COUNT];
+
+[numthreads(GROUP_THREAD_COUNT, 1, 1)]
+void main(
+ uint dispatchThreadID : SV_DispatchThreadIndex,
+ uint groupThreadID : SV_GroupThreadIndex,
+ uint groupID : SV_GroupIndex )
+{
+ // the actual algorithm being done here is bogus
+
+ // load shared memory
+ s[groupThreadID] = input[dispatchThreadID];
+
+ // do some sum passes
+ for(uint stride = 1; stride < GROUP_THREAD_COUNT; stride <<= 1)
+ {
+ GroupMemoryBarrierWithGroupSync();
+
+ s[groupThreadID] += s[groupThreadID - stride];
+ }
+
+ GroupMemoryBarrierWithGroupSync();
+
+ output[dispatchThreadID] = s[0];
+}
+