GPURenderPassEncoder: executeBundles() method - Web APIs | MDN
Syntax
js
executeBundles(bundles)
Parameters
bundles-
An array of
GPURenderBundleobjects, containing the pre-recorded commands to execute.
Return value
None (Undefined).
Validation
The following criteria must be met when calling executeBundles(), otherwise a GPUValidationError is generated and the GPURenderPassEncoder becomes invalid.
For each GPURenderBundle:
- If the render pass's
depthReadOnlyproperty (as specified in the descriptor of the originatingGPUCommandEncoder.beginRenderPass()call) istrue, then the bundle'sdepthReadOnlyproperty (as specified in the descriptor of theGPUDevice.createRenderBundleEncoder()call that created the originatingGPURenderBundleEncoder) is alsotrue. - If the render pass's
stencilReadOnlyproperty (as specified in the descriptor of the originatingGPUCommandEncoder.beginRenderPass()call) istrue, then the bundle'sstencilReadOnlyproperty (as specified in the descriptor of theGPUDevice.createRenderBundleEncoder()call that created the originatingGPURenderBundleEncoder) is alsotrue. - The layout of the render pipeline specified in
GPURenderPassEncoder.setPipeline()(as defined in the descriptor of the originatingGPUDevice.createRenderPipeline()call) equals the layout of the render bundle pipeline specified inGPURenderBundleEncoder.setPipeline().
Examples
In the WebGPU Samples Animometer example, a lot of like operations are done on many different objects simultaneously. executeBundles() is used to reuse the work on multiple render passes to improve performance. Study the example code listing for the full context.
js
// …
return function doDraw(timestamp) {
if (startTime === undefined) {
startTime = timestamp;
}
uniformTime[0] = (timestamp - startTime) / 1000;
device.queue.writeBuffer(uniformBuffer, timeOffset, uniformTime.buffer);
renderPassDescriptor.colorAttachments[0].view = context
.getCurrentTexture()
.createView();
const commandEncoder = device.createCommandEncoder();
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
if (settings.renderBundles) {
passEncoder.executeBundles([renderBundle]);
} else {
recordRenderPass(passEncoder);
}
passEncoder.end();
device.queue.submit([commandEncoder.finish()]);
};
// …
Specifications
| Specification |
|---|
| WebGPU # dom-gpurenderpassencoder-executebundles |
Browser compatibility
See also
- The WebGPU API