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

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

    // Y component of scale is calculated by the copySizeHeight / textureHeight. Only
    // flipY case can get negative number.
    var flipY = uniforms.u_scale.y < 0.0;

    // Texture coordinate takes top-left as origin point. We need to map the
    // texture to triangle carefully.
    if (flipY) {
        // We need to get the mirror positions(mirrored based on y = 0.5) on flip cases.
        // Adopt transform to src texture and then mapping it to triangle coord which
        // do a +1 shift on Y dimension will help us got that mirror position perfectly.
        output.texcoords = (texcoord[VertexIndex] * uniforms.u_scale + uniforms.u_offset) *
            vec2<f32>(1.0, -1.0) + vec2<f32>(0.0, 1.0);
    } else {
        // For the normal case, we need to get the exact position.
        // So mapping texture to triangle firstly then adopt the transform.
        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>;

@fragment fn fs_main(
    @location(0) texcoord : vec2<f32>
) -> @location(0) vec4<f32> {
    // Clamp the texcoord and discard the out-of-bound pixels.
    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);
    // Swizzling of texture formats when sampling / rendering is handled by the
    // hardware so we don't need special logic in this shader. This is covered by tests.
    return srcColor;
}
