GPUComputePassEncoder
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Note: This feature is available in Web Workers.
The GPUComputePassEncoder
interface of the WebGPU API encodes commands related to controlling the compute shader stage, as issued by a GPUComputePipeline
. It forms part of the overall encoding activity of a GPUCommandEncoder
.
A compute pipeline contains a single compute stage in which a compute shader takes general data, processes it in parallel across a specified number of workgroups, then returns the result in one or more buffers.
A GPUComputePassEncoder
object instance is created via the GPUCommandEncoder.beginComputePass()
property.
Instance properties
Instance methods
dispatchWorkgroups()
Experimental-
Dispatches a specific grid of workgroups to perform the work being done by the current
GPUComputePipeline
. dispatchWorkgroupsIndirect()
Experimental-
Dispatches a grid of workgroups, defined by the parameters of a
GPUBuffer
, to perform the work being done by the currentGPUComputePipeline
. end()
Experimental-
Completes recording of the current compute pass command sequence.
insertDebugMarker()
Experimental-
Marks a specific point in a series of encoded commands with a label.
popDebugGroup()
Experimental-
Ends a debug group, which is begun with a
pushDebugGroup()
call. pushDebugGroup()
Experimental-
Begins a debug group, which is marked with a specified label, and will contain all subsequent encoded commands up until a
popDebugGroup()
method is invoked. setBindGroup()
Experimental-
Sets the
GPUBindGroup
to use for subsequent compute commands, for a given index. setPipeline()
Experimental-
Sets the
GPUComputePipeline
to use for this compute pass.
Examples
In our basic compute demo, several commands are recorded via a GPUCommandEncoder
. Most of these commands originate from the GPUComputePassEncoder
created via GPUCommandEncoder.beginComputePass()
.
// ...
// Create GPUCommandEncoder to encode commands to issue to the GPU
const commandEncoder = device.createCommandEncoder();
// Create GPUComputePassEncoder to initiate compute pass
const passEncoder = commandEncoder.beginComputePass();
// Issue commands
passEncoder.setPipeline(computePipeline);
passEncoder.setBindGroup(0, bindGroup);
passEncoder.dispatchWorkgroups(Math.ceil(BUFFER_SIZE / 64));
// End the compute pass
passEncoder.end();
// Copy output buffer to staging buffer
commandEncoder.copyBufferToBuffer(
output,
0, // Source offset
stagingBuffer,
0, // Destination offset
BUFFER_SIZE,
);
// End frame by passing array of command buffers to command queue for execution
device.queue.submit([commandEncoder.finish()]);
// ...
Specifications
Specification |
---|
WebGPU # gpucomputepassencoder |
Browser compatibility
BCD tables only load in the browser
See also
- The WebGPU API