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 der GPUDevice
-Schnittstelle erstellt eine GPUComputePipeline
, die den Compute-Shader-Stage 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 Sequenz von Aufzeichnungsarten 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, der zur Identifizierung oder Auswahl der Aufzeichnung verwendet wird, und dieconstant
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, falls eine angegeben ist, oder anderweitig 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 diese Stage zur Ausführung ihrer Aufgabe verwenden wird. Die entsprechende Shader-Funktion muss das@compute
-Attribut haben, um als dieser Einstiegspunkt erkannt zu werden. Siehe Entry Point Declaration für weitere Informationen.Sie können die
entryPoint
-Eigenschaft weglassen, wenn Ihr Shader-Code eine einzelne Funktion enthält, bei der das@compute
-Attribut gesetzt ist — der Browser wird diese als den Standard-Einstiegspunkt verwenden. WennentryPoint
weggelassen wird und der Browser keinen Standard-Einstiegspunkt bestimmen kann, wird einGPUValidationError
erzeugt und die resultierendeGPUComputePipeline
ist ungültig. module
-
Ein
GPUShaderModule
-Objekt, das den WGSL-Code enthält, den diese programmierbare Stage ausführen wird.
label
Optional-
Ein String, der eine Bezeichnung bereitstellt, die verwendet werden kann, um das Objekt zu identifizieren, 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, 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 die Pipeline veranlasst, ein implizites Bind-Group-Layout basierend auf den im Shader-Code definierten Bindungen zu generieren. Wenn"auto"
verwendet wird, dürfen die generierten Bind-Group-Layouts nur mit der aktuellen Pipeline verwendet werden.
- Ein
Rückgabewert
Eine 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 zurückgegeben:
- Die Workgroup-Speichergröße, die von dem innerhalb der
compute
-Eigenschaft referenziertenmodule
verwendet wird, ist kleiner oder gleich dermaxComputeWorkgroupStorageSize
-Grenze desGPUDevice
. - Das
module
verwendet eine Anzahl von Compute-Aufrufen pro Workgroup, die kleiner oder gleich dermaxComputeInvocationsPerWorkgroup
-Grenze desGPUDevice
ist. - Die Workgroup-Größe des
module
ist kleiner oder gleich der entsprechendenmaxComputeWorkgroupSizeX
,maxComputeWorkgroupSizeY
odermaxComputeWorkgroupSizeZ
-Grenze desGPUDevice
. - Wenn die
entryPoint
-Eigenschaft weggelassen wird, enthält der Shader-Code eine einzelne Compute-Shader-Einstiegspunktfunktion, die der Browser als Standard-Einstiegspunkt verwenden kann.
Beispiele
Hinweis: Die WebGPU-Beispiele enthalten viele weitere Beispiele.
Einfaches Beispiel
Unser einfaches Compute-Demo zeigt einen Prozess von:
- Erstellen eines Bind-Group-Layouts mit
GPUDevice.createBindGroupLayout()
. - Einbinden des
bindGroupLayout
inGPUDevice.createPipelineLayout()
, um einGPUPipelineLayout
zu erstellen. - Sofortige Verwendung 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