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 in secure contexts (HTTPS), in some or all supporting browsers.
Note: This feature is available in Web Workers.
The createRenderPipelineAsync() method of the
GPUDevice interface returns a Promise that fulfills with a GPURenderPipeline, which can control the vertex and fragment shader stages and be used in a GPURenderPassEncoder or GPURenderBundleEncoder, once the pipeline can be used without any stalling.
Note:
It is generally preferable to use this method over GPUDevice.createRenderPipeline() whenever possible, as it prevents blocking of GPU operation execution on pipeline compilation.
Syntax
createRenderPipelineAsync(descriptor)
Parameters
descriptor-
See the descriptor definition for the
GPUDevice.createRenderPipeline()method.
Return value
A Promise that fulfills with a GPURenderPipeline 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 a GPUPipelineError:
- 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: The WebGPU 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 a GPURenderPipeline via a createRenderPipelineAsync() 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
Loading…
See also
- The WebGPU API