GPUCommandEncoder: beginRenderPass() 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.
ThebeginRenderPass() method of theGPUCommandEncoder interface starts encoding a render pass, returning aGPURenderPassEncoder that can be used to control rendering.
In this article
Syntax
beginRenderPass(descriptor)Parameters
descriptorAn object containing the following properties:
colorAttachmentsAn array of objects (seeColor attachment object structure) defining the color attachments that will be output to when executing this render pass.
depthStencilAttachmentOptionalAn object (seeDepth/stencil attachment object structure) defining the depth/stencil attachment that will be output to and tested against when executing this render pass.
labelOptionalA string providing a label that can be used to identify the object, for example in
GPUErrormessages or console warnings.maxDrawCountOptionalA number indicating the maximum number of draw calls that will be done in the render pass. This is used by some implementations to size work injected before the render pass. You should keep the default value — 50000000 — unless you know that more draw calls will be done.
occlusionQuerySetOptionalThe
GPUQuerySetthat will store the occlusion query results for this pass.timestampWritesOptionalAn array of objects defining where and when timestamp query values will be written for this pass. These objects have the following properties:
querySetA
GPUQuerySetof type"timestamp"that the timestamp query results will be written to.beginningOfPassWriteIndexA number specifying the query index in
querySetwhere the timestamp at the beginning of the render pass will be written. This is optional - if not defined, no timestamp will be written for the beginning of the pass.endOfPassWriteIndexA number specifying the query index in
querySetwhere the timestamp at the end of the render pass will be written. This is optional - if not defined, no timestamp will be written for the end of the pass.
Note:The
timestamp-queryfeature needs to be enabled to use timestamp queries. Timestamp query values are written in nanoseconds, but how the value is determined is implementation-defined.
Color attachment object structure
Color attachment objects can have the following properties:
clearValueOptionalA color value to clear the
viewtexture to, prior to executing the render pass. This value is ignored ifloadOpis not set to"clear".clearValuetakes an array or object representing the four color componentsr,g,b, andaas decimals.For example, you can pass an array like
[0.0, 0.5, 1.0, 1.0], or its equivalent object{ r: 0.0, g: 0.5, b: 1.0, a: 1.0 }.If
clearValueis omitted, it defaults to{ r: 0, g: 0, b: 0, a: 0 }.depthSliceOptionalA number representing the index of the 3D depth slice that will be output to for this color attachment, in the case of a 3D
GPUTextureViewview. When specified, this allows WebGPU to render directly to slices of 3D textures within render passes.loadOpAn enumerated value indicating the load operation to perform on
viewprior to executing the render pass. Possible values are:"clear": Loads theclearValuefor this attachment into the render pass."load": Loads the existing value for this attachment into the render pass.
Note:It is recommended to always use
"clear"in cases where the initial value doesn't matter, as it will give better performance on some devices such as mobiles.storeOpAn enumerated value indicating the store operation to perform on
viewafter executing the render pass. Possible values are:"discard": Discards the resulting value of the render pass for this attachment."store": Stores the resulting value of the render pass for this attachment.
resolveTargetOptionalAn object representing the texture subresource that will receive the resolved output for this color attachment if
viewis multisampled. This can be one of the following:GPUTextureViewGPUTexture: Can be used in place of aGPUTextureView, provided a default view is desired. When used in this context,GPUTextureis equivalent to aGPUTextureViewobject created using aGPUTexture.createView()call with no argument specified.
viewAn object representing the texture subresource that will be output to for this color attachment. This can be one of the following:
GPUTextureViewGPUTexture: Can be used in place of aGPUTextureView, provided a default view is desired. When used in this context,GPUTextureis equivalent to aGPUTextureViewobject created using aGPUTexture.createView()call with no argument specified.
Note:Each color or depth/stencil attachment must be a unique texture subresource, and texture subresources used as attachments cannot be used inside the render pass.
Depth/stencil attachment object structure
ThedepthStencilAttachment object can have the following properties:
depthClearValueOptionalA number indicating the value to clear
view's depth component prior to executing the render pass. This is ignored ifdepthLoadOpis not set to"clear".The value must be between 0.0 and 1.0, inclusive.
depthLoadOpOptionalAn enumerated value indicating the load operation to perform on
view's depth component prior to executing the render pass. Possible values are:"clear": Loads theclearValuefor this attachment into the render pass."load": Loads the existing value for this attachment into the render pass.
Note:It is recommended to always use
"clear"in cases where the initial value doesn't matter, as it will give better performance on some devices such as mobiles.depthReadOnlyOptionalA boolean. Setting the value to
truecauses the depth component ofviewto be read-only. IfdepthReadOnlyis omitted, it defaults tofalse.depthStoreOpOptionalAn enumerated value indicating the store operation to perform on
view's depth component after executing the render pass. Possible values are:"discard": Discards the resulting value of the render pass for this attachment."store": Stores the resulting value of the render pass for this attachment.
stencilClearValueOptionalA number indicating the value to clear
view's stencil component to prior to executing the render pass. This is ignored ifstencilLoadOpis not set to"clear".If
stencilClearValueis omitted, it defaults to 0.stencilLoadOpOptionalAn enumerated value indicating the load operation to perform on
view's stencil component prior to executing the render pass. Possible values are:"clear": Loads theclearValuefor this attachment into the render pass."load": Loads the existing value for this attachment into the render pass.
Note:It is recommended to always use
"clear"in cases where the initial value doesn't matter, as it will give better performance on some devices such as mobiles.stencilReadOnlyOptionalA boolean. Setting the value to
truecauses the stencil component ofviewto be read-only. IfstencilReadOnlyis omitted, it defaults tofalse.stencilStoreOpOptionalAn enumerated value indicating the store operation to perform on
view's stencil component after executing the render pass. Possible values are:"discard": Discards the resulting value of the render pass for this attachment."store": Stores the resulting value of the render pass for this attachment.
viewAn object representing the texture subresource that will be output to and read from for this depth/stencil attachment. This can be one of the following:
GPUTextureViewGPUTexture: Can be used in place of aGPUTextureView, provided a default view is desired. When used in this context,GPUTextureis equivalent to aGPUTextureViewobject created using aGPUTexture.createView()call with no argument specified.
Return value
AGPURenderPassEncoder object instance.
Validation
The following criteria must be met when callingbeginRenderPass(), otherwise aGPUValidationError is generated and an invalidGPURenderPassEncoder is returned.
General:
colorAttachments.lengthis less than or equal to theGPUDevice'smaxColorAttachmentslimit.- If
colorAttachmentscontains onlynullvalues,depthStencilAttachmentis provided. - All
views incolorAttachmentsanddepthStencilAttachmenthave equalGPUTexture.sampleCountvalues and render extents (GPUTexture.height,GPUTexture.width, andGPUTexture.depthOrArrayLayers). - If
occlusionQuerySetis set, the referencedGPUQuerySethas atypeof"occlusion".
For color attachment objects
- The
viewis renderable, and theview's format (i.e., specified in the descriptor of the originatingGPUTexture.createView()call) is a color renderable format. - If
resolveTargetis provided:- The
view's originatingGPUTexture'ssampleCountis greater than 1. - The
resolveTarget's originatingGPUTexture'ssampleCountis 1. resolveTargetis renderable.- The sizes of the subresources that
viewandresolveTargetprovide a view of match. view's andresolveTarget's formats match.
- The
- Color attachments bytes per sample is less than or equal to the
GPUDevice'smaxColorAttachmentBytesPerSamplelimit.
For depth/stencil attachment objects:
- The
viewis renderable, and its format is adepth-or-stencil format. - If
depthLoadOpis set to"clear", a validdepthClearValueis provided. - If
view's format is a combined depth-or-stencil format,depthReadOnlymatchesstencilReadOnly. - If
view's format has a depth aspect, anddepthReadOnlyisfalse,depthLoadOpanddepthStoreOpare provided. - If
view's format has a depth aspect, anddepthReadOnlyistrue,depthLoadOpanddepthStoreOpare not provided. - If
view's format has a stencil aspect, andstencilReadOnlyisfalse,stencilLoadOpandstencilStoreOpare provided. - If
view's format has a stencil aspect, andstencilReadOnlyistrue,stencilLoadOpandstencilStoreOpare not provided.
For timestamp queries:
Examples
In ourbasic render demo, a number of commands are recorded via aGPUCommandEncoder. These commands originate from theGPURenderPassEncoder created viabeginRenderPass() :
// …// Create GPUCommandEncoderconst commandEncoder = device.createCommandEncoder();// Create GPURenderPassDescriptor to tell WebGPU which texture to draw into, then initiate render passconst renderPassDescriptor = { colorAttachments: [ { clearValue: clearColor, loadOp: "clear", storeOp: "store", view: context.getCurrentTexture().createView(), }, ],};const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);// Draw a trianglepassEncoder.setPipeline(renderPipeline);passEncoder.setVertexBuffer(0, vertexBuffer);passEncoder.draw(3);// End the render passpassEncoder.end();device.queue.submit([commandEncoder.finish()]);// …Specifications
| Specification |
|---|
| WebGPU> # dom-gpucommandencoder-beginrenderpass> |
Browser compatibility
See also
- TheWebGPU API