GPUDevice: createComputePipelineAsync()-Methode

Limited availability

This feature is not Baseline because it does not work in some of the most widely-used browsers.

Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig vor der Verwendung auf produktiven Webseiten.

Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.

Hinweis: Diese Funktion ist in Web Workers verfügbar.

Die createComputePipelineAsync()-Methode des GPUDevice-Interfaces gibt ein Promise zurück, das mit einer GPUComputePipeline erfüllt wird. Diese kann die Compute Shader-Stufe steuern und in einem GPUComputePassEncoder verwendet werden, sobald die Pipeline ohne Verzögerung genutzt werden kann.

Hinweis: Es ist generell vorzuziehen, diese Methode über GPUDevice.createComputePipeline() zu verwenden, wann immer dies möglich ist, da so die Blockierung der GPU-Operationen während der Pipeline-Kompilierung vermieden wird.

Syntax

js
createComputePipelineAsync(descriptor)

Parameter

descriptor

Siehe die Definition des Descriptors für die Methode GPUDevice.createComputePipeline().

Rückgabewert

Ein Promise, das mit einer GPUComputePipeline-Objektinstanz erfüllt wird, wenn die erstellte Pipeline ohne zusätzliche Verzögerung einsatzbereit ist.

Validierung

Wenn die Pipeline-Erstellung fehlschlägt und die resultierende Pipeline dadurch ungültig wird, wird das zurückgegebene Promise mit einem GPUPipelineError abgelehnt:

  • Wenn dies auf einen internen Fehler zurückzuführen ist, wird der GPUPipelineError ein reason von "internal" haben.
  • Wenn dies auf einen Validierungsfehler zurückzuführen ist, wird der GPUPipelineError ein reason von "validation" haben.

Ein Validierungsfehler kann auftreten, wenn eine der folgenden Bedingungen nicht erfüllt ist:

  • Die im module referenzierte Workgroup-Speichergröße innerhalb der compute-Eigenschaft ist kleiner oder gleich dem maxComputeWorkgroupStorageSize Limit des GPUDevice.
  • Das module verwendet eine Anzahl an Compute-Aufrufen pro Workgroup, die kleiner oder gleich dem maxComputeInvocationsPerWorkgroup Limit des GPUDevice ist.
  • Die Workgroup-Größe des module ist kleiner oder gleich dem entsprechenden maxComputeWorkgroupSizeX, maxComputeWorkgroupSizeY, oder maxComputeWorkgroupSizeZ Limit des GPUDevice.
  • Wenn die entryPoint-Eigenschaft weggelassen wird, enthält der Shader-Code eine einzelne Compute-Shader-Einstiegspunktfunktion, die der Browser als Standard-Einstiegspunkt verwenden kann.

Beispiele

Hinweis: Die WebGPU-Beispiele bieten viele weitere Beispiele.

Einfaches Beispiel

Das folgende Beispiel zeigt einen Prozess:

js
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",
    },
  });

  // …
}

Spezifikationen

Specification
WebGPU
# dom-gpudevice-createcomputepipelineasync

Browser-Kompatibilität

Siehe auch