playcanvas
Version:
Open-source WebGL/WebGPU 3D engine for the web
35 lines (33 loc) • 1.13 kB
JavaScript
const computeGsplatIntervalScatterSource = `
struct Interval {
workBufferBase: u32,
splatCount: u32,
boundsIndex: u32,
pad: u32
};
struct ScatterUniforms {
numIntervals: u32,
pad0: u32,
pad1: u32,
pad2: u32
};
var<uniform> uniforms: ScatterUniforms;
var<storage, read> intervals: array<Interval>;
var<storage, read> prefixSumBuffer: array<u32>;
var<storage, read_write> compactedOutput: array<u32>;
fn main( wgId: vec3u, lid: vec3u) {
let intervalIdx = wgId.x;
if (intervalIdx >= uniforms.numIntervals) { return; }
let outputOffset = prefixSumBuffer[intervalIdx];
let nextOffset = prefixSumBuffer[intervalIdx + 1u];
let count = nextOffset - outputOffset;
if (count == 0u) { return; }
let workBufferBase = intervals[intervalIdx].workBufferBase;
let tid = lid.x;
for (var j = tid; j < count; j += {WORKGROUP_SIZE}u) {
compactedOutput[outputOffset + j] = workBufferBase + j;
}
}
`;
export { computeGsplatIntervalScatterSource };