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