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 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 createComputePipeline() Methode der GPUDevice Schnittstelle erstellt eine GPUComputePipeline, die die Compute-Shader-Stufe steuern kann 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 Compute-Shader-Einstiegspunkt der Pipeline beschreibt. Dieses Objekt kann die folgenden Eigenschaften enthalten:

constants Optional

Eine Folge 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 Karten. In jedem Fall ist das id ein Schlüssel, der verwendet wird, um den Datensatz zu identifizieren oder auszuwählen, und das constant ist ein enumerierter Wert, der einen WGSL darstellt.

Abhängig davon, welche Konstante Sie überschreiben möchten, kann das id die Form der numerischen ID der Konstante annehmen, falls angegeben, oder ansonsten der Name des Konstantenidentifikators.

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

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

Der Name der Funktion im module, die von dieser Stufe zur Durchführung ihrer Arbeit verwendet wird. Die entsprechende Shader-Funktion muss das @compute Attribut haben, um als dieser Einstiegspunkt identifiziert zu werden. Weitere Informationen finden Sie in der Deklaration des Einstiegspunkts.

Sie können die Eigenschaft entryPoint weglassen, wenn Ihr Shader-Code eine einzelne Funktion mit gesetztem @compute Attribut enthält — der Browser wird diese als Standard-Einstiegspunkt verwenden. Wenn entryPoint weggelassen wird und der Browser keinen Standard-Einstiegspunkt bestimmen kann, wird ein GPUValidationError erzeugt und die resultierende GPUComputePipeline wird ungültig sein.

module

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

label Optional

Ein String, der ein Etikett bereitstellt, das verwendet werden kann, um das Objekt zu identifizieren, beispielsweise in GPUError Nachrichten 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, das mit GPUDevice.createPipelineLayout() erstellt wurde, und es der GPU ermöglicht, im Voraus herauszufinden, wie die Pipeline am effizientesten ausgeführt werden kann.
  • Ein String "auto", der dazu führt, dass die Pipeline basierend auf allen im Shader-Code definierten Bindungen einen impliziten Bind-Group-Layout generiert. Wenn "auto" verwendet wird, dürfen die generierten Bind-Group-Layouts 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 erzeugt und ein ungültiges GPUComputePipeline Objekt wird zurückgegeben:

  • Die in der compute Eigenschaft referenzierte module nutzt weniger oder gleich viel Arbeitsgruppenspeichergröße als das maxComputeWorkgroupStorageSize Limit des GPUDevice.
  • Das module verwendet eine Anzahl von Compute-Aufrufen pro Arbeitsgruppe, die kleiner oder gleich dem maxComputeInvocationsPerWorkgroup Limit des GPUDevice ist.
  • Die Arbeitsgruppengröße des module ist kleiner oder gleich dem entsprechenden maxComputeWorkgroupSizeX, maxComputeWorkgroupSizeY oder maxComputeWorkgroupSizeZ Limit des GPUDevice.
  • Wenn die Eigenschaft entryPoint weggelassen wird, enthält der Shader-Code eine einzige Funktion für den Compute-Shader-Einstiegspunkt, die der Browser als Standard-Einstiegspunkt verwenden kann.

Beispiele

Hinweis: Die WebGPU Beispiele bieten viele weitere Beispiele.

Einfaches Beispiel

Unser einfaches Compute-Demo zeigt einen Prozess des:

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

Siehe auch