ReadonlyslotsCluster slots per lane in the merge on this device (1 when subgroups are at least 32 wide).
Builds one mesh's tree. Throws if the build was refused.
Builds every mesh's tree in one batch and one submit. A refused mesh has problem set; the others are fine.
timestampWrites (optional) times the batch's one compute pass: resolve its query set after this resolves.
OptionaltimestampWrites: GPUComputePassTimestampWritesUploads the inputs and sets up every buffer and bind group of a batch, so
it can be recorded with encode (any number of times: each recording
rebuilds the same trees) and read with finish. Throws if the batch is
too big for the device (see planGpuHplocBatches).
Optionalpool: GpuHplocScratchPoolA scratch pool for these batches (each a list of meshes, as
planGpuHplocBatches splits them), to build them one after another
with createBatch(batch, options, pool): their inputs, scratch and
uniforms are allocated once, at the largest batch's size
(hplocScratchPoolBytes). Free it with destroy after the last
batch's finish.
StaticisThe builder needs subgroups; without them, callers use the declared fallback (tinybvh, B0).
Compiles the kernels (asynchronously, so the main thread doesn't stall).
Every compile is asked for before the first await, so a caller that
starts other compiles in the same task (ddgi-core's prepare) has these
queued alongside, not behind them.
Copies every usable tree of a batch back into CPU memory (one readback).
Compiles the builder's kernels once per device and builds any number of batches with them.