// Internal shader used to copy between two textures @group(0) @binding(0) var source: texture_2d; struct VertexOut { @builtin(position) pos: vec4f, @location(0) uv: vec2f, } @vertex fn vert_main(@builtin(vertex_index) vertexIndex : u32) -> VertexOut { var pos = array( vec2f(-1.0, -1.0), vec2f( 3.0, -1.0), vec2f(-1.0, 3.0)); return VertexOut( vec4f(pos[vertexIndex], 0.0, 1.0), vec2f(pos[vertexIndex].xy * vec2f(0.5, -0.5) + 0.5) ); } @fragment fn frag_main(in: VertexOut) -> @location(0) vec4 { let uv = vec2u(in.uv.xy * vec2f(textureDimensions(source))); return textureLoad(source, uv, 0); }