(1, 0, 0); coord2 = coordS + vec3u(2, 0, 0); } case 1: { coord1 = coordE - vec3u(2, 0, 0); coord2 = coordE - vec3u(1, 0, 0); } case 2: { coord1 = coordS + vec3u(1, 0, 0); coord2 = coordE - vec3u(1, 0, 0); } case 3: { coord1 = coordS + vec3u(1, 0, 0); coord2 = coordS + vec3u(2, 0, 0); } default: { return; // unreachable when shift == 0 } } } if (coord1.x < srcBoundary.x) { mask &= 0xffff00ffu; v[1] = textureLoadGeneral(src_tex, coord1, params.mipLevel).r; } if (coord2.x < srcBoundary.x) { mask &= 0xff00ffffu; v[2] = textureLoadGeneral(src_tex, coord2, params.mipLevel).r; } let readDstBufAtMid: bool = (params.srcExtent.x + params.shift > params.bytesPerRow) && (params.srcExtent.x < params.bytesPerRow); if (readDstBufAtMid && id.x == 0) { let original: u32 = dst_buf[dstOffset]; result = (original & mask) | (encodeVectorInU32General(v) & ~mask); } else { result = encodeVectorInU32General(v); } }