UNPKG

playcanvas

Version:

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

42 lines (41 loc) 1.54 kB
import indirectCoreCS from "../common/comp/indirect-core.js"; import dispatchCoreCS from "../common/comp/dispatch-core.js"; import sortIndirectArgsCS from "../common/comp/sort-indirect-args.js"; const computeGsplatProjectorWriteIndirectArgsSource = ` ${indirectCoreCS} ${dispatchCoreCS} ${sortIndirectArgsCS} @group(0) @binding(0) var<storage, read> renderCounter: array<u32>; @group(0) @binding(1) var<storage, read_write> indirectDrawArgs: array<DrawIndexedIndirectArgs>; @group(0) @binding(2) var<storage, read_write> numSplatsBuf: array<u32>; @group(0) @binding(3) var<storage, read_write> indirectDispatchArgs: array<u32>; @group(0) @binding(4) var<storage, read_write> sortElementCountBuf: array<u32>; struct WriteArgsUniforms { drawSlot: u32, indexCount: u32, sortSlotBase: u32, pad0: u32, sortIndirectInfo: vec4<u32> }; @group(0) @binding(5) var<uniform> uniforms: WriteArgsUniforms; @compute @workgroup_size(1) fn main() { let count = renderCounter[0]; let instanceCount = (count + {INSTANCE_SIZE}u - 1u) / {INSTANCE_SIZE}u; indirectDrawArgs[uniforms.drawSlot] = DrawIndexedIndirectArgs( uniforms.indexCount, instanceCount, 0u, 0, 0u ); numSplatsBuf[0] = count; sortElementCountBuf[0] = count; writeSortIndirectArgs(uniforms.sortSlotBase, count, uniforms.sortIndirectInfo); } `; var compute_gsplat_projector_write_indirect_args_default = computeGsplatProjectorWriteIndirectArgsSource; export { computeGsplatProjectorWriteIndirectArgsSource, compute_gsplat_projector_write_indirect_args_default as default };