#version 450 /* built in: in uvec3 gl_NumWorkGroups; in uvec3 gl_WorkGroupID; in uvec3 gl_LocalInvocationID; in uvec3 gl_GlobalInvocationID; in uint gl_LocalInvocationIndex; */ layout(local_size_x_id = 0, local_size_y = 1, local_size_z = 1) in; layout(push_constant) uniform PushStruct { uint size; uint offset; } p; layout(binding = 0) buffer inBuffer { uint v[]; }; layout(binding = 1) buffer outBufer { uint g_v[]; }; void main() { uint gid = gl_GlobalInvocationID.x; if (gid >= p.size) { return; } if (gid < p.offset) g_v[gid] = v[gid]; else g_v[gid] = v[gid - p.offset] + v[gid]; }