GPUDevice: createPipelineLayout() Methode
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
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 createPipelineLayout()-Methode der GPUDevice-Schnittstelle erstellt ein GPUPipelineLayout, das die von einer Pipeline verwendeten GPUBindGroupLayouts definiert. GPUBindGroups, die während der Befehlscodierung mit der Pipeline verwendet werden, müssen kompatible GPUBindGroupLayouts haben.
Syntax
createPipelineLayout(descriptor)
Parameter
descriptor-
Ein Objekt, das die folgenden Eigenschaften enthält:
bindGroupLayouts-
Ein Array von Werten, die die Bind-Group-Layouts für eine Pipeline darstellen. Jeder Wert kann sein:
- Ein
GPUBindGroupLayout-Objekt, erstellt durch einen Aufruf vonGPUDevice.createBindGroupLayout(). Jedes Objekt entspricht einem@groupAttribut im Shader-Code, der im verwandtenGPUShaderModuleverwendet wird. null, was ein leeres Bind-Group-Layout darstellt.null-Werte werden beim Erstellen eines Pipeline-Layouts ignoriert.
- Ein
labelOptional-
Ein String, der ein Label bereitstellt, das verwendet werden kann, um das Objekt zu identifizieren, zum Beispiel in
GPUError-Meldungen oder Konsolenwarnungen.
Rückgabewert
Eine Instanz des GPUPipelineLayout-Objekts.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn createPipelineLayout() aufgerufen wird, andernfalls wird ein GPUValidationError erzeugt und ein ungültiges GPUPipelineLayout-Objekt zurückgegeben:
- Die
GPUBindGroupLayout-Objekte inbindGroupLayoutssind gültig. - Die Anzahl der
GPUBindGroupLayout-Objekte inbindGroupLayoutsist kleiner als dasmaxBindGroupsLimit desGPUDevice.
Beispiele
Hinweis: Die WebGPU-Beispiele bieten viele weitere Beispiele.
Mehrere Bind-Group-Layouts, Bind-Group und Pipeline-Layout
Der folgende Codeausschnitt:
- Erstellt ein
GPUBindGroupLayout, das eine Bindung mit einem Puffer, einer Textur und einem Sampler beschreibt. - Erstellt ein
GPUPipelineLayoutbasierend auf demGPUBindGroupLayout.
// …
const bindGroupLayout = device.createBindGroupLayout({
entries: [
{
binding: 0,
visibility: GPUShaderStage.VERTEX | GPUShaderStage.FRAGMENT,
buffer: {},
},
{
binding: 1,
visibility: GPUShaderStage.FRAGMENT,
texture: {},
},
{
binding: 2,
visibility: GPUShaderStage.FRAGMENT,
sampler: {},
},
],
});
const pipelineLayout = device.createPipelineLayout({
bindGroupLayouts: [bindGroupLayout],
});
// …
Ein leeres Bind-Group-Layout spezifizieren
In diesem Ausschnitt erstellen wir drei Bind-Group-Layouts, wobei Bind-Group-Layout 1 Fragmentdaten und Bind-Group-Layout 2 Vertexdaten repräsentiert. Wenn wir eine Pipeline erstellen möchten, die nur Bind-Group-Layouts 0 und 2 verwendet, können wir null für Bind-Group-Layout 1 übergeben und dann ohne einen Fragment-Shader rendern.
const bgl0 = device.createBindGroupLayout({ entries: myGlobalEntries });
const bgl1 = device.createBindGroupLayout({ entries: myFragmentEntries });
const bgl2 = device.createBindGroupLayout({ entries: myVertexEntries });
// pipeline layout can be used to render without a fragment shader
const pipelineLayout = device.createPipelineLayout({
bindGroupLayouts: [bgl0, null, bgl2],
});
Spezifikationen
| Spezifikation |
|---|
| WebGPU> # dom-gpudevice-createpipelinelayout> |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API