struct Uniforms {
  dstTextureFlipY : u32;
  channelCount : u32;
  srcCopyOrigin : vec2<u32>;
  dstCopyOrigin : vec2<u32>;
  copySize : vec2<u32>;
};

struct OutputBuf {
  result : array<u32>;
};

[[group(0), binding(0)]] var src : texture_2d<f32>;

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

[[group(0), binding(2)]] var<storage, read_write> output : OutputBuf;

[[group(0), binding(3)]] var<uniform> uniforms : Uniforms;

fn aboutEqual(value : f32, expect : f32) -> bool {
  return (abs((value - expect)) < 0.001);
}

[[stage(compute), workgroup_size(1, 1, 1)]]
fn main([[builtin(global_invocation_id)]] GlobalInvocationID : vec3<u32>) {
  let srcSize : vec2<i32> = textureDimensions(src);
  let dstSize : vec2<i32> = textureDimensions(dst);
  let dstTexCoord : vec2<u32> = vec2<u32>(GlobalInvocationID.xy);
  let nonCoveredColor : vec4<f32> = vec4<f32>(0.0, 1.0, 0.0, 1.0);
  var success : bool = true;
  if (((((dstTexCoord.x < uniforms.dstCopyOrigin.x) || (dstTexCoord.y < uniforms.dstCopyOrigin.y)) || (dstTexCoord.x >= (uniforms.dstCopyOrigin.x + uniforms.copySize.x))) || (dstTexCoord.y >= (uniforms.dstCopyOrigin.y + uniforms.copySize.y)))) {
    success = (success && all((textureLoad(dst, vec2<i32>(dstTexCoord), 0) == nonCoveredColor)));
  } else {
    var srcTexCoord : vec2<u32> = ((dstTexCoord - uniforms.dstCopyOrigin) + uniforms.srcCopyOrigin);
    if ((uniforms.dstTextureFlipY == 1u)) {
      srcTexCoord.y = ((u32(srcSize.y) - srcTexCoord.y) - 1u);
    }
    let srcColor : vec4<f32> = textureLoad(src, vec2<i32>(srcTexCoord), 0);
    let dstColor : vec4<f32> = textureLoad(dst, vec2<i32>(dstTexCoord), 0);
    if ((uniforms.channelCount == 2u)) {
      success = ((success && aboutEqual(dstColor.r, srcColor.r)) && aboutEqual(dstColor.g, srcColor.g));
    } else {
      success = ((((success && aboutEqual(dstColor.r, srcColor.r)) && aboutEqual(dstColor.g, srcColor.g)) && aboutEqual(dstColor.b, srcColor.b)) && aboutEqual(dstColor.a, srcColor.a));
    }
  }
  let outputIndex : u32 = ((GlobalInvocationID.y * u32(dstSize.x)) + GlobalInvocationID.x);
  if (success) {
    output.result[outputIndex] = 1u;
  } else {
    output.result[outputIndex] = 0u;
  }
}
