1#version 460 2layout(local_size_x = 512, local_size_y = 1) in; 3layout(std430) buffer; 4 5struct MyStruct { 6 uint a; 7 uint b; 8 uint c; 9}; 10 11layout(binding = 0) buffer MyStructs { 12 uint count; 13 MyStruct data[]; 14} 15my_structs; 16 17layout(binding = 1) buffer Output { 18 uint a; 19 uint b; 20 uint c; 21} 22o; 23 24shared MyStruct s[512]; 25 26void main() { 27 s[0] = MyStruct(1, 2, 3); 28 29 uint id = gl_GlobalInvocationID.x; 30 MyStruct ms = 31 id > my_structs.count ? s[id - my_structs.count] : my_structs.data[id]; 32 33 atomicAdd(o.a, ms.a); 34 atomicAdd(o.b, ms.b); 35 atomicAdd(o.c, ms.c); 36} 37 38