1#version 450 2layout(local_size_x = 8, local_size_y = 8, local_size_z = 1) in; 3 4struct Foo0 5{ 6 float a; 7}; 8 9struct Foo1 10{ 11 Foo0 a; 12}; 13 14void Zero(out Foo0 v) 15{ 16 v.a = 0.0; 17} 18 19struct Foo2 20{ 21 Foo1 a; 22 float weight; 23}; 24 25layout(std430, binding = 0) buffer SSBO 26{ 27 Foo2 outputs[]; 28}; 29 30shared Foo2 coeffs[64]; 31 32void main() 33{ 34 Foo2 data; 35 data.weight = 0.0; 36 Zero(data.a.a); 37 coeffs[gl_LocalInvocationIndex] = data; 38 barrier(); 39 if (gl_LocalInvocationIndex == 0u) 40 outputs[gl_WorkGroupID.x] = coeffs[0]; 41} 42