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
|
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);
}
|