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 Berechnungsshader-Stufe steuern kann und in einem GPUComputePassEncoder
verwendet werden kann.
Syntax
createComputePipeline(descriptor)
Parameter
descriptor
-
Ein Objekt, das die folgenden Eigenschaften enthält:
compute
-
Ein Objekt, das den Einstiegsunkt des Berechnungsshaders der Pipeline beschreibt. Dieses Objekt kann die folgenden Eigenschaften enthalten:
constants
Optional-
Eine Sequenz von Record-Typen 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 dasid
ein Schlüssel zur Identifizierung oder Auswahl des Datensatzes, und derconstant
ist ein enumerierter Wert, der ein WGSL darstellt.Je nachdem, welche Konstante Sie überschreiben möchten, kann das
id
die Form der numerischen ID der Konstante annehmen, falls eine angegeben ist, oder ansonsten den Bezeichnernamen der Konstante.Ein Code-Ausschnitt, 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 diese Stufe nutzen wird, um ihre Arbeit auszuführen. Die entsprechende Shader-Funktion muss das@compute
-Attribut haben, um als dieser Einstiegsunkt identifiziert zu werden. Siehe Einstiegspunkt-Deklaration für mehr Informationen.Sie können die
entryPoint
-Eigenschaft auslassen, wenn Ihr Shader-Code eine einzelne Funktion mit dem@compute
-Attribut enthält — der Browser wird diese als Standard-Einstiegspunkt verwenden. WennentryPoint
weggelassen wird und der Browser keinen Standard-Einstiegspunkt bestimmen kann, wird einGPUValidationError
generiert und die resultierendeGPUComputePipeline
wird ungültig. module
-
Ein
GPUShaderModule
-Objekt, das den WGSL-Code enthält, den diese programmierbare Stufe ausführen wird.
label
Optional-
Eine Zeichenkette, die ein Label bereitstellt, das verwendet werden kann, um das Objekt zu identifizieren, z.B. 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, erstellt mitGPUDevice.createPipelineLayout()
, das der GPU ermöglicht, im Voraus herauszufinden, wie die Pipeline am effizientesten ausgeführt werden kann. - Eine Zeichenkette
"auto"
, die dazu führt, dass die Pipeline ein implizites Bind-Group-Layout basierend auf den im Shader-Code definierten Bindungen generiert. Wenn"auto"
verwendet wird, dürfen die generierten Bind-Group-Layouts nur mit der aktuellen Pipeline verwendet werden.
- Ein
Rückgabewert
Eine Instanz des GPUComputePipeline
-Objekts.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn createComputePipeline()
aufgerufen wird, ansonsten wird ein GPUValidationError
generiert und ein ungültiges GPUComputePipeline
-Objekt zurückgegeben:
- Die im
compute
-Eigentum referenziertemodule
-Arbeitsgruppenspeichergröße ist kleiner oder gleich derGPUDevice
-maxComputeWorkgroupStorageSize
-Grenze. - Das
module
verwendet eine Anzahl von Berechnungsaufrufen pro Arbeitsgruppe, die kleiner oder gleich derGPUDevice
-maxComputeInvocationsPerWorkgroup
-Grenze ist. - Die Arbeitsgruppengröße des
module
ist kleiner oder gleich der entsprechendenGPUDevice
-maxComputeWorkgroupSizeX
,maxComputeWorkgroupSizeY
odermaxComputeWorkgroupSizeZ
-Grenze. - Wenn die
entryPoint
-Eigenschaft weggelassen wird, enthält der Shader-Code eine einzelne Berechnungsshader-Einstiegspunktfunktion, die der Browser als Standard-Einstiegspunkt verwenden kann.
Beispiele
Hinweis: Die WebGPU-Beispiele bieten viele weitere Beispiele.
Einfaches Beispiel
Unser einfaches Berechnungs-Demo zeigt einen Prozess von:
- Erstellen eines Bind-Group-Layouts mit
GPUDevice.createBindGroupLayout()
. - Einfügen des
bindGroupLayout
inGPUDevice.createPipelineLayout()
, um einGPUPipelineLayout
zu erstellen. - Sofortige Verwendung dieses Werts in einem
createComputePipeline()
-Aufruf, um eineGPUComputePipeline
zu erstellen.
// …
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
- Die WebGPU API