GPUDevice: createComputePipeline()-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, bevor Sie diese produktiv verwenden.

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

Hinweis: Dieses Feature ist verfügbar in Web Workers.

Die createComputePipeline()-Methode der GPUDevice-Schnittstelle erstellt eine GPUComputePipeline, die die Berechnungsschicht steuern und in einem GPUComputePassEncoder verwendet werden kann.

Syntax

js
createComputePipeline(descriptor)

Parameter

descriptor

Ein Objekt, das die folgenden Eigenschaften enthält:

compute

Ein Objekt, das den Berechnungseintrittspunkt der Pipeline beschreibt. Dieses Objekt kann die folgenden Eigenschaften enthalten:

constants Optional

Eine Sequenz von Datensatztypen mit der Struktur (id, value), die Überschreibungswerte für WGSL-Konstanten, die in der Pipeline überschrieben werden können darstellen. Diese verhalten sich wie geordnete Maps. In jedem Fall ist id ein Schlüssel, der zur Identifizierung oder Auswahl des Datensatzes verwendet wird, und constant ist ein enumerierter Wert, der ein WGSL darstellt.

Abhängig von der Konstante, die Sie überschreiben möchten, kann id die Form der numerischen ID der Konstante annehmen, falls eine spezifiziert ist, oder anderweitig den Bezeichnernamen der Konstante.

Ein Codeausschnitt, der Überschreibungswerte für mehrere überschreibbare Konstanten bereitstellt, könnte so aussehen:

js
{
  // ...
  constants: {
    0: false,
    1200: 3.0,
    1300: 2.0,
    width: 20,
    depth: -1,
    height: 15,
  }
}
entryPoint

Der Name der Funktion im module, die diese Phase zur Ausführung ihrer Arbeit verwenden wird. Die entsprechende Shader-Funktion muss das @compute-Attribut haben, um als dieser Einstiegspunkt identifiziert zu werden. Weitere Informationen finden Sie unter Einstiegspunktdeklaration.

module

Ein GPUShaderModule-Objekt, das den WGSL-Code enthält, den diese programmierbare Phase ausführen wird.

label Optional

Ein String, der eine Bezeichnung bereitstellt, die zur Identifikation des Objekts verwendet werden kann, zum Beispiel in GPUError-Meldungen oder Konsolenwarnungen.

layout

Definiert das Layout (Struktur, Zweck und Typ) aller GPU-Ressourcen (Puffer, Texturen usw.), die während der Ausführung der Pipeline verwendet werden. Mögliche Werte sind:

  • Ein GPUPipelineLayout-Objekt, erstellt mit GPUDevice.createPipelineLayout(), das es der GPU ermöglicht, im Voraus herauszufinden, wie die Pipeline am effizientesten ausgeführt wird.
  • Ein String "auto", der die Pipeline dazu veranlasst, ein implizites Bindungsgruppenlayout basierend auf den im Shader-Code definierten Bindungen zu erzeugen. Wenn "auto" verwendet wird, dürfen die generierten Bindungsgruppenlayouts nur mit der aktuellen Pipeline verwendet werden.

Rückgabewert

Eine Instanz des GPUComputePipeline-Objekts.

Validierung

Die folgenden Kriterien müssen erfüllt sein, wenn createComputePipeline() aufgerufen wird, andernfalls wird ein GPUValidationError generiert und ein ungültiges GPUComputePipeline-Objekt zurückgegeben:

  • Die Arbeitsgruppenspeichergröße, die vom module innerhalb der compute-Eigenschaft referenziert wird, ist kleiner oder gleich dem Limit maxComputeWorkgroupStorageSize des GPUDevice.
  • Das module verwendet eine Anzahl von Berechnungsaufrufen pro Arbeitsgruppe, die kleiner oder gleich dem Limit maxComputeInvocationsPerWorkgroup des GPUDevice ist.
  • Die Arbeitsgruppengröße des module ist kleiner oder gleich dem entsprechenden Limit maxComputeWorkgroupSizeX, maxComputeWorkgroupSizeY oder maxComputeWorkgroupSizeZ des GPUDevice.

Beispiele

Hinweis: Die WebGPU-Beispiele bieten viele weitere Beispiele.

Einfaches Beispiel

Unser einfaches Berechnungsdemo zeigt einen Prozess von:

js
// ...

const bindGroupLayout = device.createBindGroupLayout({
  entries: [
    {
      binding: 0,
      visibility: GPUShaderStage.COMPUTE,
      buffer: {
        type: "storage",
      },
    },
  ],
});

const computePipeline = device.createComputePipeline({
  layout: device.createPipelineLayout({
    bindGroupLayouts: [bindGroupLayout],
  }),
  compute: {
    module: shaderModule,
    entryPoint: "main",
  },
});

// ...

Spezifikationen

Specification
WebGPU
# dom-gpudevice-createcomputepipeline

Browser-Kompatibilität

BCD tables only load in the browser

Siehe auch