#version 450 layout(local_size_x = 64) in; layout(set = 0, binding = 0) buffer SSBO_A { float data[]; } ssbo_a; layout(set = 0, binding = 0) buffer SSBO_B { uvec2 data[]; } ssbo_b; layout(set = 0, binding = 0) readonly buffer SSBO_BRO { uvec2 data[]; } ssbo_b_readonly; layout(set = 0, binding = 1) uniform UBO_C { float data[1024]; } ubo_c; layout(set = 0, binding = 1) uniform UBO_D { uvec2 data[1024]; } ubo_d; layout(set = 0, binding = 2) buffer SSBO_As { float data[]; } ssbo_as[4]; layout(set = 0, binding = 2) buffer SSBO_Bs { uvec2 data[1024]; } ssbo_bs[4]; layout(set = 0, binding = 2) readonly buffer SSBO_BsRO { uvec2 data[1024]; } ssbo_bs_readonly[4]; layout(set = 0, binding = 3) uniform UBO_Cs { float data[1024]; } ubo_cs[4]; layout(set = 0, binding = 3) uniform UBO_Ds { uvec2 data[1024]; } ubo_ds[4]; layout(set = 2, binding = 0) buffer SSBO_E { float data[]; } ssbo_e; layout(set = 2, binding = 0) buffer SSBO_F { uvec2 data[]; } ssbo_f; layout(set = 2, binding = 1) uniform UBO_G { float data[1024]; } ubo_g; layout(set = 2, binding = 1) uniform UBO_H { uvec2 data[1024]; } ubo_h; layout(set = 2, binding = 0) readonly buffer SSBO_I { uvec2 data[]; } ssbo_i; layout(push_constant) uniform Registers { float reg; }; void func0() { ssbo_a.data[gl_GlobalInvocationID.x] = ubo_c.data[gl_WorkGroupID.x] + reg; ssbo_b.data[gl_GlobalInvocationID.x] = ubo_d.data[gl_WorkGroupID.y] + ssbo_b_readonly.data[gl_GlobalInvocationID.x]; } void func1() { ssbo_as[gl_WorkGroupID.x].data[gl_GlobalInvocationID.x] = ubo_cs[gl_WorkGroupID.x].data[0]; } void func2() { ssbo_bs[gl_WorkGroupID.x].data[gl_GlobalInvocationID.x] = ubo_ds[gl_WorkGroupID.x].data[0] + ssbo_bs_readonly[gl_WorkGroupID.x].data[gl_GlobalInvocationID.x]; } void func3() { ssbo_e.data[gl_GlobalInvocationID.x] = ubo_g.data[gl_WorkGroupID.x]; ssbo_f.data[gl_GlobalInvocationID.x] = ubo_h.data[gl_WorkGroupID.y] + ssbo_i.data[gl_GlobalInvocationID.x]; } void main() { func0(); func1(); func2(); func3(); }