Firefox Tomorrow

web api instance method

GPUDevice: createComputePipelineAsync() method

View on MDN ↗

Secure contextAvailable in 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 createComputePipeline() whenever possible, as it prevents blocking of GPU operation execution on pipeline compilation.

Syntax

createComputePipelineAsync(descriptor)

Parameters

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.
  • If the 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.

Examples

[!NOTE] The WebGPU samples feature many more 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

SpecificationsStandards references are available on the canonical MDN page.

Browser compatibility

Browser compatibilityCompatibility data is available on the canonical MDN page.

See also