blob: a8ef1c8fb9885632b93d053eadb390749cd256bf [file]
#version 310 es
struct Params {
uint filterDim;
uint blockDim;
};
struct Flip {
uint value;
};
layout(binding = 1, std140)
uniform params_block_1_ubo {
Params inner;
} v;
layout(binding = 3, rgba8) uniform highp writeonly image2D outputTex;
layout(binding = 4, std140)
uniform flip_block_1_ubo {
Flip inner;
} v_1;
shared vec3 tile[4][256];
layout(binding = 0, std140)
uniform TintTextureUniformData_1_ubo {
uvec4 metadata[1];
} v_2;
uniform highp sampler2D inputTex_samp;
uint tint_div_u32(uint lhs, uint rhs) {
return (lhs / mix(rhs, 1u, (rhs == 0u)));
}
void main_inner(uvec3 WorkGroupID, uvec3 LocalInvocationID, uint tint_local_index) {
{
uint v_3 = 0u;
v_3 = tint_local_index;
while(true) {
uint v_4 = v_3;
if ((v_4 >= 1024u)) {
break;
}
tile[(v_4 / 256u)][(v_4 % 256u)] = vec3(0.0f);
{
v_3 = (v_4 + 64u);
}
continue;
}
}
barrier();
uint filterOffset = tint_div_u32((v.inner.filterDim - 1u), 2u);
uint v_5 = (v_2.metadata[(0u / 4u)][(0u % 4u)] - 1u);
uvec2 dims = uvec2(textureSize(inputTex_samp, int(min(uint(0), v_5))));
uvec2 v_6 = ((WorkGroupID.xy * uvec2(v.inner.blockDim, 4u)) + (LocalInvocationID.xy * uvec2(4u, 1u)));
uvec2 baseIndex = (v_6 - uvec2(filterOffset, 0u));
{
uint r = 0u;
while(true) {
if ((r < 4u)) {
} else {
break;
}
{
uint c = 0u;
while(true) {
if ((c < 4u)) {
} else {
break;
}
uvec2 loadIndex = (baseIndex + uvec2(c, r));
if ((v_1.inner.value != 0u)) {
loadIndex = loadIndex.yx;
}
uint v_7 = min(r, 3u);
uint v_8 = min(((4u * LocalInvocationID.x) + c), 255u);
vec2 v_9 = (vec2(loadIndex) + vec2(0.25f));
tile[v_7][v_8] = textureLod(inputTex_samp, (v_9 / vec2(dims)), 0.0f).xyz;
{
c = (c + 1u);
}
continue;
}
}
{
r = (r + 1u);
}
continue;
}
}
barrier();
{
uint r = 0u;
while(true) {
if ((r < 4u)) {
} else {
break;
}
{
uint c = 0u;
while(true) {
if ((c < 4u)) {
} else {
break;
}
uvec2 writeIndex = (baseIndex + uvec2(c, r));
if ((v_1.inner.value != 0u)) {
writeIndex = writeIndex.yx;
}
uint center = ((4u * LocalInvocationID.x) + c);
bool v_10 = false;
if ((center >= filterOffset)) {
v_10 = (center < (256u - filterOffset));
} else {
v_10 = false;
}
bool v_11 = false;
if (v_10) {
v_11 = all(lessThan(writeIndex, dims));
} else {
v_11 = false;
}
if (v_11) {
vec3 acc = vec3(0.0f);
{
uvec2 tint_loop_idx = uvec2(4294967295u);
uint f = 0u;
while(true) {
if (all(equal(tint_loop_idx, uvec2(0u)))) {
break;
}
if ((f < v.inner.filterDim)) {
} else {
break;
}
uint i = ((center + f) - filterOffset);
vec3 v_12 = acc;
float v_13 = (1.0f / float(v.inner.filterDim));
uint v_14 = min(r, 3u);
uint v_15 = min(i, 255u);
acc = (v_12 + (v_13 * tile[v_14][v_15]));
{
uint tint_low_inc = (tint_loop_idx.x - 1u);
tint_loop_idx.x = tint_low_inc;
uint tint_carry = uint((tint_low_inc == 4294967295u));
tint_loop_idx.y = (tint_loop_idx.y - tint_carry);
f = (f + 1u);
}
continue;
}
}
uvec2 v_16 = writeIndex;
vec4 v_17 = vec4(acc, 1.0f);
imageStore(outputTex, ivec2(v_16), v_17);
}
{
c = (c + 1u);
}
continue;
}
}
{
r = (r + 1u);
}
continue;
}
}
}
layout(local_size_x = 64, local_size_y = 1, local_size_z = 1) in;
void main() {
main_inner(gl_WorkGroupID, gl_LocalInvocationID, gl_LocalInvocationIndex);
}