#version 460 layout(local_size_x = 32) in; layout(push_constant) uniform PushConstants { uint first; uint count; uint views; float period; }; layout(set = 0, binding = 0) buffer readonly restrict Src { uint src[]; }; layout(set = 0, binding = 1) buffer writeonly restrict Dst { uint dst[]; }; void main() { uint id = gl_GlobalInvocationID.x; if (id >= count) return; uint base = (first + id) * views * 2; uint total = 0; for (uint i = 0; i < views; i++) { total += src[base + views + i] - src[base + i]; } dst[id] = uint(total * period); }