struct MyStruct { | |
uint a; | |
uint b; | |
uint c; | |
}; | |
struct MyStructs { | |
uint count; | |
MyStruct data[]; | |
}; | |
StructuredBuffer<MyStructs> sb; | |
StructuredBuffer<MyStruct> o; | |
groupshared MyStruct s[128]; | |
static const MyStruct deflt = { 1u, 2u, 3u }; | |
[numthreads(128, 1, 1)] | |
void main(uint id : SV_GroupIndex) | |
{ | |
s[0] = deflt; | |
uint count = sb.Load(0).count; | |
MyStruct ms = id > count ? s[id - count] : sb.Load(0).data[id]; | |
InterlockedAdd(o[0].a, ms.a); | |
InterlockedAdd(o[0].b, ms.b); | |
InterlockedAdd(o[0].c, ms.c); | |
} |