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