{R"wgsl(struct TileParams {
srcX: i32,
srcY: i32,
srcW: i32,
srcH: i32,
}
@group(0) @binding(0) var inputTexture: texture_2d<f32>;
@group(0) @binding(1) var outputTexture: texture_storage_2d<rgba32float, write>;
@group(0) @binding(2) var<uniform> params: TileParams;
@compute @workgroup_size(8, 8, 1)
fn cs_main(@builtin(global_invocation_id) gid: vec3<u32>) {
let size = textureDimensions(outputTexture);
if (((gid.x >= size.x) || (gid.y >= size.y))) {
return;
}
let coord = vec2<i32>(gid.xy);
if (((params.srcW <= 0i) || (params.srcH <= 0i))) {
textureStore(outputTexture, coord, vec4<f32>(0f, 0f, 0f, 0f));
return;
}
let sampleCoord = vec2<i32>((((((coord.x - params.srcX) % params.srcW) + params.srcW) % params.srcW) + params.srcX), (((((coord.y - params.srcY) % params.srcH) + params.srcH) % params.srcH) + params.srcY));
let inputSize = vec2<i32>(textureDimensions(inputTexture));
let clamped = clamp(sampleCoord, vec2<i32>(0i, 0i), (inputSize - vec2<i32>(1i, 1i)));
textureStore(outputTexture, coord, textureLoad(inputTexture, clamped, 0i));
}
)wgsl"}
Authoritative WGSL for feTile.