export const computeGsplatIntervalScatterSource: "\n\nstruct Interval {\n    workBufferBase: u32,\n    splatCount: u32,\n    boundsIndex: u32,\n    pad: u32\n};\n\nstruct ScatterUniforms {\n    numIntervals: u32,\n    pad0: u32,\n    pad1: u32,\n    pad2: u32\n};\n@group(0) @binding(0) var<uniform> uniforms: ScatterUniforms;\n\n@group(0) @binding(1) var<storage, read> intervals: array<Interval>;\n\n@group(0) @binding(2) var<storage, read> prefixSumBuffer: array<u32>;\n\n@group(0) @binding(3) var<storage, read_write> compactedOutput: array<u32>;\n\n@compute @workgroup_size({WORKGROUP_SIZE})\nfn main(@builtin(workgroup_id) wgId: vec3u, @builtin(local_invocation_id) lid: vec3u) {\n    let intervalIdx = wgId.x;\n    if (intervalIdx >= uniforms.numIntervals) { return; }\n\n    let outputOffset = prefixSumBuffer[intervalIdx];\n    let nextOffset = prefixSumBuffer[intervalIdx + 1u];\n    let count = nextOffset - outputOffset;\n    if (count == 0u) { return; }\n\n    let workBufferBase = intervals[intervalIdx].workBufferBase;\n    let tid = lid.x;\n\n    for (var j = tid; j < count; j += {WORKGROUP_SIZE}u) {\n        compactedOutput[outputOffset + j] = workBufferBase + j;\n    }\n}\n";
export default computeGsplatIntervalScatterSource;
