#version 430 core layout (local_size_x = 128, local_size_y = 1, local_size_z = 1) in; layout (r16i, binding = 0) readonly uniform iimageBuffer ImageIn; layout (r16i, binding = 1) writeonly uniform iimageBuffer ImageOut; layout (location = 0) uniform int GlobalOffset; layout (location = 1) uniform int WindowLength; void main() { int x = int(gl_GlobalInvocationID.x); int offset = GlobalOffset + x * WindowLength; float sum = 0; //int sum = 0; float scale = 1.0 / float(WindowLength); for (int i = 0; i < WindowLength; i++) { ivec4 v = imageLoad(ImageIn, offset + i); sum += float(abs(v.x)) * scale; //sum = max(abs(v.x), sum); } imageStore(ImageOut, x, ivec4(int(sum))); }