UNPKG

playcanvas

Version:

Open-source WebGL/WebGPU 3D engine for the web

2 lines (1 loc) 1.14 kB
export const computeGsplatLocalDispatchPrepSource: "\n\n@group(0) @binding(0) var<storage, read> sortElementCount: array<u32>;\n@group(0) @binding(1) var<storage, read_write> dispatchArgs: array<u32>;\n\n@compute @workgroup_size(1)\nfn main() {\n let count = sortElementCount[0];\n let maxDim = {MAX_DIM}u;\n\n // Slot 0: tile-count pass (1 splat per thread)\n let countWg = (count + {SPLATS_PER_WG_MINUS_1}u) / {SPLATS_PER_WG}u;\n if (countWg <= maxDim) {\n dispatchArgs[0] = countWg;\n dispatchArgs[1] = 1u;\n } else {\n let y = (countWg + maxDim - 1u) / maxDim;\n let x = (countWg + y - 1u) / y;\n dispatchArgs[0] = x;\n dispatchArgs[1] = y;\n }\n dispatchArgs[2] = 1u;\n\n // Slot 1: place-entries pass (1 splat per thread)\n let placeWg = (count + 255u) / 256u;\n if (placeWg <= maxDim) {\n dispatchArgs[3] = placeWg;\n dispatchArgs[4] = 1u;\n } else {\n let y = (placeWg + maxDim - 1u) / maxDim;\n let x = (placeWg + y - 1u) / y;\n dispatchArgs[3] = x;\n dispatchArgs[4] = y;\n }\n dispatchArgs[5] = 1u;\n}\n";