#version 450 layout(local_size_x = 1) in; struct Sub { float f[2]; vec2 f2[2]; vec3 f3[2]; vec4 f4[2]; }; layout(std140, binding = 0) buffer SSBO { Sub sub[2]; }; void main() { Sub foo = sub[gl_WorkGroupID.x]; foo.f[gl_GlobalInvocationID.x] += 1.0; foo.f2[gl_GlobalInvocationID.x] += 2.0; foo.f3[gl_GlobalInvocationID.x] += 3.0; foo.f4[gl_GlobalInvocationID.x] += 4.0; sub[gl_WorkGroupID.x] = foo; sub[0].f[0] += 5.0; sub[0].f2[1] += 5.0; }