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, bevor Sie diese produktiv verwenden.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Dieses Feature ist verfügbar in Web Workers.
Die createComputePipeline()
Methode des GPUDevice
Interfaces erstellt eine GPUComputePipeline
, die die Steuerung der Compute-Shader-Stufe ermöglicht 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 für die 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, darstellt. Diese verhalten sich ähnlich wie geordnete Maps. In jedem Fall ist dasid
ein Schlüssel, der zur Identifizierung oder Auswahl des Records verwendet wird, und dasconstant
ist ein enumerierter Wert, der ein WGSL darstellt.Abhängig davon, welche Konstante Sie überschreiben möchten, kann das
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 wie folgt 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 verwenden wird, um ihre Arbeit auszuführen. Die entsprechende Shader-Funktion muss das@compute
Attribut haben, um als dieser Einstiegspunkt identifiziert zu werden. Siehe Einstiegspunktdeklaration für weitere Informationen.Sie können die
entryPoint
Eigenschaft weglassen, wenn Ihr Shader-Code eine einzelne Funktion mit dem@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
wird ungültig. module
-
Ein
GPUShaderModule
Objekt, das den WGSL Code enthält, den diese programmierbare Stufe 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, erstellt mitGPUDevice.createPipelineLayout()
, das es der GPU ermöglicht, im Voraus herauszufinden, wie die Pipeline am effizientesten ausgeführt werden kann. - Ein String
"auto"
, der die Pipeline dazu bringt, ein implizites Bindgruppen-Layout basierend auf den im Shader-Code definierten Bindungen zu generieren. Wenn"auto"
verwendet wird, können die generierten Bindgruppen-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 zurückgegeben:
- Die im
module
, das imcompute
Eigenschaft referenziert wird, genutzte Workgroup-Speichergröße 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 bieten viele weitere Beispiele.
Einfaches Beispiel
Unser einfaches Compute-Demo zeigt einen Prozess von:
- Erstellen eines Bindgruppen-Layouts mit
GPUDevice.createBindGroupLayout()
. - Führen des
bindGroupLayout
inGPUDevice.createPipelineLayout()
, um einGPUPipelineLayout
zu erstellen. - Verwenden dieses Wertes sofort 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
BCD tables only load in the browser
Siehe auch
- Die WebGPU API