summaryrefslogtreecommitdiff
path: root/tests/ir/loop.slang
blob: ddbd7ecb0f2d823b5d327982ed8b6a5f5ce692be (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
//TEST:SIMPLE:-dump-ir -profile cs_5_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_DispatchThreadID,
    uint groupThreadID      : SV_GroupThreadID,
    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];
}