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
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 istid
ein Schlüssel zur Identifizierung oder Auswahl des Datensatzes, undconstant
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. WennentryPoint
weggelassen wird und der Browser keinen Standard-Einstiegspunkt bestimmen kann, wird einGPUValidationError
generiert und die resultierendeGPUComputePipeline
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 mitGPUDevice.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.
- Ein
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 dercompute
Eigenschaft referenzierte Arbeitsgruppen-Speichergröße ist kleiner oder gleich demmaxComputeWorkgroupStorageSize
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 den entsprechendenmaxComputeWorkgroupSizeX
,maxComputeWorkgroupSizeY
odermaxComputeWorkgroupSizeZ
Limits desGPUDevice
. - 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:
- Erstellen eines Bind-Group-Layouts mit
GPUDevice.createBindGroupLayout()
. - Einfügen des
bindGroupLayout
inGPUDevice.createPipelineLayout()
zum Erstellen einesGPUPipelineLayout
. - Sofortige Verwendung dieses Wertes in einem
createComputePipeline()
Aufruf zum Erstellen einerGPUComputePipeline
.
// …
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