GPUDevice: createComputePipelineAsync() method
  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
createComputePipeline(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 
GPUPipelineError will have a reason of "internal".  - If this is due to a validation error, the 
GPUPipelineError will have a reason of "validation".  
 A validation error can occur if any of the following are false:
  - The workgroup storage size used by the 
module referenced inside the compute property is less than or equal to the GPUDevice's maxComputeWorkgroupStorageSize limit.  - The 
module uses a number of compute invocations per workgroup less than or equal to the GPUDevice's maxComputeInvocationsPerWorkgroup limit.  - The 
module's workgroup size is less than or equal to the GPUDevice's corresponding maxComputeWorkgroupSizeX, maxComputeWorkgroupSizeY, or maxComputeWorkgroupSizeZ limit.  
 
Examples
Basic example
The following example shows a process of:
  
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
Browser compatibility
 | 
Desktop | 
Mobile | 
 | 
Chrome | 
Edge | 
Firefox | 
Internet Explorer | 
Opera | 
Safari | 
WebView Android | 
Chrome Android | 
Firefox for Android | 
Opera Android | 
Safari on IOS | 
Samsung Internet | 
createComputePipelineAsync | 
113Currently supported on ChromeOS, macOS, and Windows only. | 
113Currently supported on ChromeOS, macOS, and Windows only. | 
previewCurrently supported on Linux and Windows only. | 
No | 
99Currently supported on ChromeOS, macOS, and Windows only. | 
No | 
No | 
No | 
No | 
No | 
No | 
No | 
 
See also