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.
createRenderPipelineAsync(descriptor)
descriptorSee the descriptor definition for the GPUDevice.createRenderPipeline() method.
A Promise that fulfills with a GPURenderPipeline object instance when the created pipeline is ready to be used without additional delay.
If pipeline creation fails and the resulting pipeline becomes invalid as a result, the returned promise rejects with a GPUPipelineError:
GPUPipelineError will have a reason of "internal".GPUPipelineError will have a reason of "validation".A validation error can occur if any of the following are false:
depthStencil objects: format is a depth-or-stencil format.depthBias, depthBiasClamp, and depthBiasSlopeScale properties are set to 0 for line and point topologies, i.e., if topology is set to "line-list", "line-strip", or "point-list".depthWriteEnabled is true or depthCompare is not "always", format has a depth component.stencilFront or stencilBack's properties are not at their default values, format has a stencil component.fragment objects: targets.length is less than or equal to the GPUDevice's maxColorAttachments limit.target, writeMask's numeric equivalent is less than 16."src-alpha-saturated"), the output has an alpha channel (that is, it must be a vec4).entryPoint property is omitted, the shader code contains a single fragment shader entry point function for the browser to use as the default entry point.primitive objects: unclippedDepth property is used, the depth-clip-control feature is enabled.vertex objects: entryPoint property is omitted, the shader code contains a single vertex shader entry point function for the browser to use as the default entry point.Note: The WebGPU samples feature many more examples.
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);
// …
}
| Specification |
|---|
| WebGPU> # dom-gpudevice-createrenderpipelineasync> |
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | |
createRenderPipelineAsync |
113Currently supported on ChromeOS, macOS, and Windows only. |
113Currently supported on ChromeOS, macOS, and Windows only. |
141Currently supported on Windows only, in all contexts except for service workers. |
99Currently supported on ChromeOS, macOS, and Windows only. |
26 | 121 | No | 81 | 26 | 25.0 | 121 | 26 |
dual-source-blending |
130Currently supported on ChromeOS, macOS, and Windows only. |
130Currently supported on ChromeOS, macOS, and Windows only. |
No | 115Currently supported on ChromeOS, macOS, and Windows only. |
No | 130 | No | 86 | No | 28.0 | 130 | No |
optional_depthcompare_depthwriteenabled |
120Currently supported on ChromeOS, macOS, and Windows only. |
120Currently supported on ChromeOS, macOS, and Windows only. |
No | 106Currently supported on ChromeOS, macOS, and Windows only. |
No | 121 | No | 81 | No | 25.0 | 121 | No |
optional_entryPoint |
121Currently supported on ChromeOS, macOS, and Windows only. |
121Currently supported on ChromeOS, macOS, and Windows only. |
No | 107Currently supported on ChromeOS, macOS, and Windows only. |
No | 121Currently supported on ChromeOS, macOS, and Windows only. |
No | 81Currently supported on ChromeOS, macOS, and Windows only. |
No | 25.0Currently supported on ChromeOS, macOS, and Windows only. |
121Currently supported on ChromeOS, macOS, and Windows only. |
No |
texture_rgb10a2uint |
119Currently supported on ChromeOS, macOS, and Windows only. |
119Currently supported on ChromeOS, macOS, and Windows only. |
No | 105Currently supported on ChromeOS, macOS, and Windows only. |
No | 121 | No | 81 | No | 25.0 | 121 | No |
validates_depth_bias_for_line_and_point_topologies |
131Currently supported on ChromeOS, macOS, and Windows only. |
131Currently supported on ChromeOS, macOS, and Windows only. |
No | 116Currently supported on ChromeOS, macOS, and Windows only. |
No | 131Currently supported on ChromeOS, macOS, and Windows only. |
No | 87Currently supported on ChromeOS, macOS, and Windows only. |
No | No | 131Currently supported on ChromeOS, macOS, and Windows only. |
No |
vertex_unorm10-10-10-2 |
119Currently supported on ChromeOS, macOS, and Windows only. |
119Currently supported on ChromeOS, macOS, and Windows only. |
No | 105Currently supported on ChromeOS, macOS, and Windows only. |
No | 121 | No | 81 | No | 25.0 | 121 | No |
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/GPUDevice/createRenderPipelineAsync