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
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 dasid
ein Schlüssel, der verwendet wird, um den Datensatz zu identifizieren oder auszuwählen, und dasconstant
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. WennentryPoint
weggelassen wird und der Browser keinen Standard-Einstiegspunkt bestimmen kann, wird einGPUValidationError
erzeugt und die resultierendeGPUComputePipeline
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 mitGPUDevice.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.
- Ein
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 referenziertemodule
nutzt weniger oder gleich viel Arbeitsgruppenspeichergröße als dasmaxComputeWorkgroupStorageSize
Limit desGPUDevice
. - Das
module
verwendet eine Anzahl von Compute-Aufrufen pro Arbeitsgruppe, die kleiner oder gleich demmaxComputeInvocationsPerWorkgroup
Limit desGPUDevice
ist. - Die Arbeitsgruppengröße des
module
ist kleiner oder gleich dem entsprechendenmaxComputeWorkgroupSizeX
,maxComputeWorkgroupSizeY
odermaxComputeWorkgroupSizeZ
Limit desGPUDevice
. - 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:
- Erstellens eines Bind-Group-Layouts mit
GPUDevice.createBindGroupLayout()
. - Einfügen des
bindGroupLayout
inGPUDevice.createPipelineLayout()
um einGPUPipelineLayout
zu erstellen. - Sofortiges Verwenden dieses Wertes 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