playcanvas
Version:
Open-source WebGL/WebGPU 3D engine for the web
35 lines (29 loc) • 1.23 kB
JavaScript
// Chunk sort: bitonic sort for chunks of large-tile entries produced by bucket pre-sort.
// Each workgroup reads (start, count) from chunkRanges and calls the shared bitonic sort.
// tileEntries already contains the bucket-sorted data (copied by a prior pass).
const computeGsplatLocalChunkSortSource = /* wgsl */ `
#include "gsplatLocalBitonicCS"
var<storage, read_write> tileEntries: array<u32>;
var<storage, read> depthBuffer: array<u32>;
var<storage, read> chunkRanges: array<u32>;
var<storage, read> totalChunks: array<u32>;
struct Uniforms {
maxChunks: u32,
}
var<uniform> uniforms: Uniforms;
fn main(
localIdx: u32,
wid: vec3u,
numWorkgroups: vec3u
) {
let chunkIdx = wid.y * numWorkgroups.x + wid.x;
if (chunkIdx >= min(totalChunks[0], uniforms.maxChunks)) {
return;
}
let tStart = chunkRanges[chunkIdx * 2u];
let count = chunkRanges[chunkIdx * 2u + 1u];
bitonicSortRange(localIdx, tStart, count);
}
`;
export { computeGsplatLocalChunkSortSource };