min_max.glsl (817B)
1 /* See LICENSE for license details. */ 2 3 /* NOTE: Does a binary search in 3D for smallest and largest output values */ 4 layout(local_size_x = 32, local_size_y = 1, local_size_z = 32) in; 5 6 layout(rg32f, binding = 0) readonly uniform image3D u_out_data_tex; 7 layout(rg32f, binding = 1) writeonly uniform image3D u_mip_view_tex; 8 9 void main() 10 { 11 ivec3 out_coord = ivec3(gl_GlobalInvocationID.xyz); 12 13 ivec3 idx = out_coord * 2; 14 vec2 min_max = vec2(1000000000, 0); 15 for (int i = 0; i < 2; i++) { 16 for (int j = 0; j < 2; j++) { 17 vec2 a = imageLoad(u_out_data_tex, idx + ivec3(i, j, 0)).xy; 18 vec2 b = imageLoad(u_out_data_tex, idx + ivec3(i, j, 1)).xy; 19 min_max.x = min(min_max.x, min(a.x, b.x)); 20 min_max.y = max(min_max.y, max(a.y, b.y)); 21 } 22 } 23 imageStore(u_mip_view_tex, out_coord, vec4(min_max, 0, 1)); 24 }