struct Uniforms {
  u_scale : vec2<f32>;
  u_offset : vec2<f32>;
}

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

struct VertexOutputs {
  [[location(0)]]
  texcoords : vec2<f32>;
  [[builtin(position)]]
  position : vec4<f32>;
}

[[stage(vertex)]]
fn vs_main([[builtin(vertex_index)]] VertexIndex : u32) -> VertexOutputs {
  var texcoord = array<vec2<f32>, 3>(vec2<f32>(-0.5, 0.0), vec2<f32>(1.5, 0.0), vec2<f32>(0.5, 2.0));
  var output : VertexOutputs;
  output.position = vec4<f32>(((texcoord[VertexIndex] * 2.0) - vec2<f32>(1.0, 1.0)), 0.0, 1.0);
  var flipY = (uniforms.u_scale.y < 0.0);
  if (flipY) {
    output.texcoords = ((((texcoord[VertexIndex] * uniforms.u_scale) + uniforms.u_offset) * vec2<f32>(1.0, -1.0)) + vec2<f32>(0.0, 1.0));
  } else {
    output.texcoords = ((((texcoord[VertexIndex] * vec2<f32>(1.0, -1.0)) + vec2<f32>(0.0, 1.0)) * uniforms.u_scale) + uniforms.u_offset);
  }
  return output;
}

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

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

[[stage(fragment)]]
fn fs_main([[location(0)]] texcoord : vec2<f32>) -> [[location(0)]] vec4<f32> {
  var clampedTexcoord = clamp(texcoord, vec2<f32>(0.0, 0.0), vec2<f32>(1.0, 1.0));
  if (!(all((clampedTexcoord == texcoord)))) {
    discard;
  }
  var srcColor = textureSample(myTexture, mySampler, texcoord);
  return srcColor;
}
