(src_buf[uintOffset] >> bitShift) & 0xff; } fn loadU16AsU32(byteOffset: u32) -> u32 { let firstHalf = loadU8AsU32(byteOffset); let secondHalf = loadU8AsU32(byteOffset + 1); return firstHalf | (secondHalf << 8); } // byteOffset is expected to be aligned to 4. fn loadU32(byteOffset: u32) -> u32 { let uintOffset = byteOffset >> 2; return src_buf[uintOffset]; } // byteOffset is expected to be aligned to 4. fn loadTwoU32s(byteOffset: u32) -> vec2u { return vec2u(loadU32(byteOffset), loadU32(byteOffset + 4)); } @fragment fn blit_buffer_to_texture( @builtin(position) screen_position : vec4f ) -> @location(0) vec4f { let iposition = vec2u(screen_position.xy) - params.dstOrigin; let srcOffset = params.srcOffset + iposition.x * kPixelSize + iposition.y * params.bytesPerRow; return unpackData(srcOffset); }