#version 440 core layout(std430) buffer; layout(set=0, binding=0) writeonly uniform image3D uOutput; layout(binding=1) readonly buffer kernelBuffer{ vec4 data[]; } uKernel; layout(set=0, binding=2) uniform constBuffer { int w; int h; int c; } uConst; layout (local_size_x = 16, local_size_y = 16, local_size_z = 1) in; void main() { ivec3 pos = ivec3(gl_GlobalInvocationID); if (pos.x < uConst.w && pos.y < uConst.h) { vec4 res = uKernel.data[0 +pos.x +pos.y*uConst.w +pos.z*uConst.w*uConst.h ]; imageStore(uOutput, ivec3(pos.x, pos.y, pos.z), res); } }