GPURenderPassEncoder: executeBundles() method
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Secure context: This feature is available only insecure contexts (HTTPS), in some or allsupporting browsers.
Note: This feature is available inWeb Workers.
TheexecuteBundles() method of theGPURenderPassEncoder interface executes commands previously recorded into the referencedGPURenderBundles, as part of this render pass.
Note:After callingexecuteBundles() the currently set vertex buffers, index buffers, bind groups, and pipeline are all cleared, even if no bundles are actually executed.
In this article
Syntax
executeBundles(bundles)Parameters
bundlesAn array of
GPURenderBundleobjects, containing the pre-recorded commands to execute.
Return value
None (Undefined).
Validation
The following criteria must be met when callingexecuteBundles(), otherwise aGPUValidationError is generated and theGPURenderPassEncoder becomes invalid.
For eachGPURenderBundle:
- 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 SamplesAnimometer 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.
// …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
- TheWebGPU API