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));
      }
    }
  }
}
