GPUDevice: createRenderPipelineAsync() 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.
ThecreateRenderPipelineAsync() method of theGPUDevice interface returns aPromise that fulfills with aGPURenderPipeline, which can control the vertex and fragment shader stages and be used in aGPURenderPassEncoder orGPURenderBundleEncoder, once the pipeline can be used without any stalling.
Note:It is generally preferable to use this method overGPUDevice.createRenderPipeline() whenever possible, as it prevents blocking of GPU operation execution on pipeline compilation.
In this article
Syntax
createRenderPipelineAsync(descriptor)Parameters
descriptorSee the descriptor definition for the
GPUDevice.createRenderPipeline()method.
Return value
APromise that fulfills with aGPURenderPipeline object instance when the created pipeline is ready to be used without additional delay.
Validation
If pipeline creation fails and the resulting pipeline becomes invalid as a result, the returned promise rejects with aGPUPipelineError:
- If this is due to an internal error, the
GPUPipelineErrorwill have areasonof"internal". - If this is due to a validation error, the
GPUPipelineErrorwill have areasonof"validation".
A validation error can occur if any of the following are false:
- For
depthStencilobjects:formatis adepth-or-stencilformat.- The
depthBias,depthBiasClamp, anddepthBiasSlopeScaleproperties are set to0for line and point topologies, i.e., iftopologyis set to"line-list","line-strip", or"point-list". - If
depthWriteEnabledistrueordepthCompareis not"always",formathas a depth component. - If
stencilFrontorstencilBack's properties are not at their default values,formathas a stencil component.
- For
fragmentobjects:targets.lengthis less than or equal to theGPUDevice'smaxColorAttachmentslimit.- For each
target,writeMask's numeric equivalent is less than 16. - If any of the used blend factor operations use the source alpha channel (for example
"src-alpha-saturated"), the output has an alpha channel (that is, it must be avec4). - If the
entryPointproperty is omitted, the shader code contains a single fragment shader entry point function for the browser to use as the default entry point.
- For
primitiveobjects:- If the
unclippedDepthproperty is used, thedepth-clip-controlfeature is enabled.
- If the
- For
vertexobjects:- If the
entryPointproperty is omitted, the shader code contains a single vertex shader entry point function for the browser to use as the default entry point.
- If the
Examples
Note:TheWebGPU samples feature many more examples.
Basic example
The following example shows a basic example of the construction of a valid render pipeline descriptor object, which is then used to create aGPURenderPipeline via acreateRenderPipelineAsync() call.
async function init() { // … const vertexBuffers = [ { attributes: [ { shaderLocation: 0, // position offset: 0, format: "float32x4", }, { shaderLocation: 1, // color offset: 16, format: "float32x4", }, ], arrayStride: 32, stepMode: "vertex", }, ]; const pipelineDescriptor = { vertex: { module: shaderModule, entryPoint: "vertex_main", buffers: vertexBuffers, }, fragment: { module: shaderModule, entryPoint: "fragment_main", targets: [ { format: navigator.gpu.getPreferredCanvasFormat(), }, ], }, primitive: { topology: "triangle-list", }, layout: "auto", }; const renderPipeline = await device.createRenderPipelineAsync(pipelineDescriptor); // …}Specifications
| Specification |
|---|
| WebGPU> # dom-gpudevice-createrenderpipelineasync> |
Browser compatibility
See also
- TheWebGPU API