38 lines
572 B
Plaintext
38 lines
572 B
Plaintext
#version 460
|
|
layout(local_size_x = 512, local_size_y = 1) in;
|
|
layout(std430) buffer;
|
|
|
|
struct MyStruct {
|
|
uint a;
|
|
uint b;
|
|
uint c;
|
|
};
|
|
|
|
layout(binding = 0) buffer MyStructs {
|
|
uint count;
|
|
MyStruct data[];
|
|
}
|
|
my_structs;
|
|
|
|
layout(binding = 1) buffer Output {
|
|
uint a;
|
|
uint b;
|
|
uint c;
|
|
}
|
|
o;
|
|
|
|
shared MyStruct s[512];
|
|
|
|
void main() {
|
|
s[0] = MyStruct(1, 2, 3);
|
|
|
|
uint id = gl_GlobalInvocationID.x;
|
|
MyStruct ms =
|
|
id > my_structs.count ? s[id - my_structs.count] : my_structs.data[id];
|
|
|
|
atomicAdd(o.a, ms.a);
|
|
atomicAdd(o.b, ms.b);
|
|
atomicAdd(o.c, ms.c);
|
|
}
|
|
|