GPUDevice: createComputePipeline() Methode

Limited availability

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

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 des GPUDevice Interface erstellt eine GPUComputePipeline, die das Compute-Shader-Stadium 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 Einstiegspunkt des Compute-Shaders 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 zur Identifizierung oder Auswahl des Datensatzes, und constant ist ein enumerierter Wert, der eine WGSL darstellt.

Abhängig davon, welche Konstante Sie überschreiben möchten, kann id die Form der numerischen ID der Konstante annehmen, wenn eine angegeben ist, oder ansonsten der Bezeichnername der Konstante.

Ein Code-Snippet, das Ü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 Optional

Der Name der Funktion im module, die dieses Stadium zur Ausführung seiner Arbeit nutzen wird. Die entsprechende Shader-Funktion muss das @compute-Attribut haben, um als dieser Einstiegspunkt identifiziert zu werden. Weitere Informationen finden Sie unter Deklaration des Einstiegspunkts.

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

module

Ein GPUShaderModule Objekt, das den WGSL-Code enthält, den dieses Programmierstadium ausführen wird.

label Optional

Ein String, der ein Label bereitstellt, das zur Identifizierung des Objekts verwendet werden kann, beispielsweise 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 auszuarbeiten, wie die Pipeline am effizientesten ausgeführt werden kann.
  • Ein String "auto", der bewirkt, dass die Pipeline ein implizites Bind-Group-Layout basierend auf allen Bindungen, die im Shader-Code definiert sind, generiert. Wenn "auto" verwendet wird, dürfen die erstellten Bind-Group-Layouts nur mit der aktuellen Pipeline verwendet werden.

Rückgabewert

Ein GPUComputePipeline Objektinstanz.

Validierung

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

  • Die von module innerhalb der compute Eigenschaft referenzierte Arbeitsgruppen-Speichergröße ist kleiner oder gleich dem 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 den entsprechenden maxComputeWorkgroupSizeX, maxComputeWorkgroupSizeY oder maxComputeWorkgroupSizeZ Limits des GPUDevice.
  • Wenn die Eigenschaft entryPoint weggelassen wird, enthält der Shader-Code eine einzelne Compute-Shader-Einstiegspunkt-Funktion, die der Browser als Standard-Einstiegspunkt verwenden kann.

Beispiele

Hinweis: Die WebGPU Beispiele bieten viele weitere Beispiele.

Einfaches Beispiel

Unser grundlegendes Compute-Demo 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

Siehe auch