GPUDevice: createComputePipelineAsync() 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 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.
Syntax
createComputePipelineAsync(descriptor)
Parameters
descriptor-
See the descriptor definition for the
GPUDevice.createComputePipeline()method.
Return value
A Promise that fulfills with a GPUComputePipeline 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:
- The workgroup storage size used by the
modulereferenced inside thecomputeproperty is less than or equal to theGPUDevice'smaxComputeWorkgroupStorageSizelimit. - The
moduleuses a number of compute invocations per workgroup less than or equal to theGPUDevice'smaxComputeInvocationsPerWorkgrouplimit. - The
module's workgroup size is less than or equal to theGPUDevice's correspondingmaxComputeWorkgroupSizeX,maxComputeWorkgroupSizeY, ormaxComputeWorkgroupSizeZlimit. - If the
entryPointproperty is omitted, the shader code contains a single compute shader entry point function for the browser to use as the default entry point.
Examples
Note: The WebGPU samples feature many more examples.
Basic example
The following example shows a process of:
- Creating a bind group layout with
GPUDevice.createBindGroupLayout(). - Feeding the
bindGroupLayoutintoGPUDevice.createPipelineLayout()to create aGPUPipelineLayout. - Using that value immediately in a
createComputePipelineAsync()call to create aGPUComputePipeline.
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",
},
});
// …
}
Specifications
| Specification |
|---|
| WebGPU> # dom-gpudevice-createcomputepipelineasync> |
Browser compatibility
Loading…
See also
- The WebGPU API