WasmGPU.compute.dispatch3D¶
Summary¶
WasmGPU.compute.dispatch3D dispatches a 3D workload using logical volume dimensions and kernel workgroup dimensions.
It computes dispatch counts with workgroups3D and then runs dispatch.
Use this for volumetric data, voxel processing, and 3D tensor kernels.
Options control submission and device-limit validation.
Syntax¶
WasmGPU.compute.dispatch3D(pipeline: GPUComputePipeline | ComputePipeline, bindGroups: ReadonlyArray<GPUBindGroup | null | undefined>, width: number, height: number, depth: number, workgroupSizeX: number, workgroupSizeY: number, workgroupSizeZ: number, label?: string, opts?: ComputeDispatchOptions): GPUCommandBuffer
const commandBuffer = wgpu.compute.dispatch3D(pipeline, bindGroups, width, height, depth, workgroupSizeX, workgroupSizeY, workgroupSizeZ, label, opts);
Parameters¶
| Name | Type | Required | Description |
|---|---|---|---|
pipeline |
GPUComputePipeline \| ComputePipeline |
Yes | Compute pipeline used for dispatch. |
bindGroups |
ReadonlyArray<GPUBindGroup \| null \| undefined> |
Yes | Bind groups in pipeline layout order. |
width |
number |
Yes | Logical X extent. |
height |
number |
Yes | Logical Y extent. |
depth |
number |
Yes | Logical Z extent. |
workgroupSizeX |
number |
Yes | Kernel workgroup X dimension. |
workgroupSizeY |
number |
Yes | Kernel workgroup Y dimension. |
workgroupSizeZ |
number |
Yes | Kernel workgroup Z dimension. |
label |
string |
No | Optional debug label. |
opts |
ComputeDispatchOptions |
No | Dispatch behavior flags (submit, validateLimits). |
Returns¶
GPUCommandBuffer - Encoded command buffer for the dispatch.
Type Details¶
Example¶
const canvas = document.querySelector("canvas");
const wgpu = await WasmGPU.create(canvas);
const nx = 64, ny = 32, nz = 16;
const storage = wgpu.compute.createStorageBuffer({ byteLength: nx * ny * nz * 4, copySrc: true });
const pipeline = wgpu.compute.createPipeline({
code: `@group(0) @binding(0) var<storage, read_write> vol: array<f32>; @compute @workgroup_size(8, 4, 4) fn main(@builtin(global_invocation_id) gid: vec3<u32>) { if (gid.x < ${nx}u && gid.y < ${ny}u && gid.z < ${nz}u) { let i = (gid.z * ${ny}u + gid.y) * ${nx}u + gid.x; vol[i] = f32(i); } }`,
bindGroups: [{ entries: [{ binding: 0, visibility: GPUShaderStage.COMPUTE, buffer: { type: "storage" } }] }]
});
const bindGroup = pipeline.createBindGroup(0, { 0: storage });
wgpu.compute.dispatch3D(pipeline, [bindGroup], nx, ny, nz, 8, 4, 4, "fill-volume", { submit: true, validateLimits: true });