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 createComputePipelineAsync() method of the GPUDevice interface returns a Promise that fulfills with a GPUComputePipeline, which can control the compute shader stage and be used in a GPUComputePassEncoder, once the pipeline can be used without any stalling.
Note: It is generally preferable to use this method over GPUDevice.createComputePipeline() whenever possible, as it prevents blocking of GPU operation execution on pipeline compilation.
createComputePipelineAsync(descriptor)
descriptorSee the descriptor definition for the GPUDevice.createComputePipeline() method.
A Promise that fulfills with a GPUComputePipeline 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:
module referenced inside the compute property is less than or equal to the GPUDevice's maxComputeWorkgroupStorageSize limit.module uses a number of compute invocations per workgroup less than or equal to the GPUDevice's maxComputeInvocationsPerWorkgroup limit.module's workgroup size is less than or equal to the GPUDevice's corresponding maxComputeWorkgroupSizeX, maxComputeWorkgroupSizeY, or maxComputeWorkgroupSizeZ limit.entryPoint property is omitted, the shader code contains a single compute 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 process of:
GPUDevice.createBindGroupLayout().bindGroupLayout into GPUDevice.createPipelineLayout() to create a GPUPipelineLayout.createComputePipelineAsync() call to create a GPUComputePipeline.async function init() {
// …
const bindGroupLayout = device.createBindGroupLayout({
entries: [
{
binding: 0,
visibility: GPUShaderStage.COMPUTE,
buffer: {
type: "storage",
},
},
],
});
const computePipeline = await device.createComputePipelineAsync({
layout: device.createPipelineLayout({
bindGroupLayouts: [bindGroupLayout],
}),
compute: {
module: shaderModule,
entryPoint: "main",
},
});
// …
}
| Specification |
|---|
| WebGPU> # dom-gpudevice-createcomputepipelineasync> |
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | |
createComputePipelineAsync |
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 |
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 |
© 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/createComputePipelineAsync