#version 310 es layout(local_size_x = 1) in; struct Foo { mat4 m; }; layout(std430, binding = 0) readonly buffer SSBO { Foo in_data[]; }; layout(std430, binding = 1) writeonly buffer SSBO2 { Foo out_data[]; }; void main() { uint ident = gl_GlobalInvocationID.x; out_data[ident].m = in_data[ident].m * in_data[ident].m; }