| #version 310 es |
| |
| |
| struct Scalars { |
| vec4 f0; |
| ivec4 i1; |
| ivec4 i2; |
| ivec4 i3; |
| }; |
| |
| layout(binding = 0, std140) |
| uniform U_block_1_ubo { |
| Scalars inner; |
| } v; |
| layout(binding = 1, rgba32ui) uniform highp writeonly uimage2D dst_image2d; |
| shared uvec4 outputs[8][32]; |
| uniform highp sampler2D src_image2d; |
| uvec4 tint_v4f32_to_v4u32(vec4 value) { |
| return uvec4(clamp(value, vec4(0.0f), vec4(4294967040.0f))); |
| } |
| void main_inner(uvec3 lid, uint tint_local_index) { |
| if ((tint_local_index < 256u)) { |
| outputs[(tint_local_index / 32u)][(tint_local_index % 32u)] = uvec4(0u); |
| } |
| barrier(); |
| int init = int(lid.z); |
| { |
| int S = init; |
| while(true) { |
| if ((S < v.inner.i3.x)) { |
| } else { |
| break; |
| } |
| { |
| uint v_1 = uint(S); |
| S = int((v_1 + uint(8))); |
| } |
| continue; |
| } |
| } |
| { |
| int s_group = 0; |
| while(true) { |
| if ((s_group < v.inner.i3.z)) { |
| } else { |
| break; |
| } |
| outputs[lid.z][lid.x] = tint_v4f32_to_v4u32(texelFetch(src_image2d, ivec2(uvec2(uint(v.inner.i3.x))), 0)); |
| barrier(); |
| uvec4 result = outputs[lid.z][lid.x]; |
| uvec2 v_2 = uvec2(uint(v.inner.i3.x)); |
| uvec4 v_3 = result; |
| imageStore(dst_image2d, ivec2(v_2), v_3); |
| { |
| uint v_4 = uint(s_group); |
| s_group = int((v_4 + uint(8))); |
| } |
| continue; |
| } |
| } |
| } |
| layout(local_size_x = 32, local_size_y = 1, local_size_z = 8) in; |
| void main() { |
| main_inner(gl_LocalInvocationID, gl_LocalInvocationIndex); |
| } |