#version 310 es layout (local_size_x = 8, local_size_y = 8) in; layout (binding = 0) readonly buffer InBuf { uvec4 data[]; } in_buf; layout (binding = 1) writeonly buffer OutBuf { uvec4 data[]; } out_buf; layout (push_constant) uniform PushConsts { uint in_img_width; uint in_x_offset; uint out_img_width; uint out_x_offset; uint copy_width; } prop; void main () { uvec2 g_id = gl_GlobalInvocationID.xy; g_id.x = min (g_id.x, prop.copy_width - 1u); out_buf.data[g_id.y * prop.out_img_width + prop.out_x_offset + g_id.x] = in_buf.data[g_id.y * prop.in_img_width + prop.in_x_offset + g_id.x]; }