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 der GPUDevice
-Schnittstelle erstellt eine GPUComputePipeline
, die die Berechnungsschicht steuern 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 Berechnungseintrittspunkt 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, der zur Identifizierung oder Auswahl des Datensatzes verwendet wird, undconstant
ist ein enumerierter Wert, der ein WGSL darstellt.Abhängig von der Konstante, die Sie überschreiben möchten, kann
id
die Form der numerischen ID der Konstante annehmen, falls eine spezifiziert ist, oder anderweitig den Bezeichnernamen der Konstante.Ein Codeausschnitt, der Ü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
-
Der Name der Funktion im
module
, die diese Phase zur Ausführung ihrer Arbeit verwenden wird. Die entsprechende Shader-Funktion muss das@compute
-Attribut haben, um als dieser Einstiegspunkt identifiziert zu werden. Weitere Informationen finden Sie unter Einstiegspunktdeklaration. module
-
Ein
GPUShaderModule
-Objekt, das den WGSL-Code enthält, den diese programmierbare Phase ausführen wird.
label
Optional-
Ein String, der eine Bezeichnung bereitstellt, die zur Identifikation des Objekts verwendet werden kann, zum Beispiel 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 wird. - Ein String "
auto
", der die Pipeline dazu veranlasst, ein implizites Bindungsgruppenlayout basierend auf den im Shader-Code definierten Bindungen zu erzeugen. Wenn "auto
" verwendet wird, dürfen die generierten Bindungsgruppenlayouts 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
generiert und ein ungültiges GPUComputePipeline
-Objekt zurückgegeben:
- Die Arbeitsgruppenspeichergröße, die vom
module
innerhalb dercompute
-Eigenschaft referenziert wird, ist kleiner oder gleich dem LimitmaxComputeWorkgroupStorageSize
desGPUDevice
. - Das
module
verwendet eine Anzahl von Berechnungsaufrufen pro Arbeitsgruppe, die kleiner oder gleich dem LimitmaxComputeInvocationsPerWorkgroup
desGPUDevice
ist. - Die Arbeitsgruppengröße des
module
ist kleiner oder gleich dem entsprechenden LimitmaxComputeWorkgroupSizeX
,maxComputeWorkgroupSizeY
odermaxComputeWorkgroupSizeZ
desGPUDevice
.
Beispiele
Hinweis: Die WebGPU-Beispiele bieten viele weitere Beispiele.
Einfaches Beispiel
Unser einfaches Berechnungsdemo zeigt einen Prozess von:
- Erstellen eines Bindungsgruppenlayouts mit
GPUDevice.createBindGroupLayout()
. - Verwendung des
bindGroupLayout
inGPUDevice.createPipelineLayout()
, um einGPUPipelineLayout
zu erstellen. - Sofortige Nutzung dieses Werts in einem
createComputePipeline()
-Aufruf zur Erstellung 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
BCD tables only load in the browser
Siehe auch
- Die WebGPU API