diff options
Diffstat (limited to 'tests/ir/loop.slang')
| -rw-r--r-- | tests/ir/loop.slang | 33 |
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]; +} + |
