struct Params {
  filterDim : u32;
  blockDim : u32;
}

[[group(0), binding(0)]] var samp : sampler;

[[group(0), binding(1)]] var<uniform> params : Params;

[[group(1), binding(1)]] var inputTex : texture_2d<f32>;

[[group(1), binding(2)]] var outputTex : texture_storage_2d<rgba8unorm, write>;

struct Flip {
  value : u32;
}

[[group(1), binding(3)]] var<uniform> flip : Flip;

var<workgroup> tile : array<array<vec3<f32>, 256>, 4>;

[[stage(compute), workgroup_size(64, 1, 1)]]
fn main([[builtin(workgroup_id)]] WorkGroupID : vec3<u32>, [[builtin(local_invocation_id)]] LocalInvocationID : vec3<u32>) {
  let filterOffset : u32 = ((params.filterDim - 1u) / 2u);
  let dims : vec2<i32> = textureDimensions(inputTex, 0);
  let baseIndex = (vec2<i32>(((WorkGroupID.xy * vec2<u32>(params.blockDim, 4u)) + (LocalInvocationID.xy * vec2<u32>(4u, 1u)))) - vec2<i32>(i32(filterOffset), 0));
  for(var r : u32 = 0u; (r < 4u); r = (r + 1u)) {
    for(var c : u32 = 0u; (c < 4u); c = (c + 1u)) {
      var loadIndex = (baseIndex + vec2<i32>(i32(c), i32(r)));
      if ((flip.value != 0u)) {
        loadIndex = loadIndex.yx;
      }
      tile[r][((4u * LocalInvocationID.x) + c)] = textureSampleLevel(inputTex, samp, ((vec2<f32>(loadIndex) + vec2<f32>(0.25, 0.25)) / vec2<f32>(dims)), 0.0).rgb;
    }
  }
  workgroupBarrier();
  for(var r : u32 = 0u; (r < 4u); r = (r + 1u)) {
    for(var c : u32 = 0u; (c < 4u); c = (c + 1u)) {
      var writeIndex = (baseIndex + vec2<i32>(i32(c), i32(r)));
      if ((flip.value != 0u)) {
        writeIndex = writeIndex.yx;
      }
      let center : u32 = ((4u * LocalInvocationID.x) + c);
      if ((((center >= filterOffset) && (center < (256u - filterOffset))) && all((writeIndex < dims)))) {
        var acc : vec3<f32> = vec3<f32>(0.0, 0.0, 0.0);
        for(var f : u32 = 0u; (f < params.filterDim); f = (f + 1u)) {
          var i : u32 = ((center + f) - filterOffset);
          acc = (acc + ((1.0 / f32(params.filterDim)) * tile[r][i]));
        }
        textureStore(outputTex, writeIndex, vec4<f32>(acc, 1.0));
      }
    }
  }
}
