GPUDevice: Methode createBindGroupLayout()
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 createBindGroupLayout()-Methode des GPUDevice-Interfaces erstellt ein GPUBindGroupLayout, das die Struktur und den Zweck von verbundenen GPU-Ressourcen wie Buffern definiert, die in einer Pipeline verwendet werden, und wird als Vorlage verwendet, wenn GPUBindGroups erstellt werden.
Syntax
createBindGroupLayout(descriptor)
Parameter
descriptor-
Ein Objekt, das die folgenden Eigenschaften enthält:
entries-
Ein Array von Eintragsobjekten, von denen jedes eine einzelne Shader-Ressourcenbindung beschreibt, die in das
GPUBindGroupLayoutaufgenommen werden soll. Jeder Eintrag entspricht einem Eintrag, der in einerGPUBindGroup(erstellt durch einen Aufruf vonGPUDevice.createBindGroup()) definiert wurde, die diesesGPUBindGroupLayout-Objekt als Vorlage verwendet. labelOptional-
Ein String, der eine Bezeichnung angibt, die zur Identifizierung des Objekts verwendet werden kann, zum Beispiel in
GPUError-Meldungen oder Konsolenwarnungen.
Eintragsobjekte
Ein Eintragsobjekt beinhaltet die folgenden Eigenschaften:
binding-
Eine Zahl, die einen eindeutigen Bezeichner für diesen spezifischen Eintrag darstellt, der dem
binding-Wert eines entsprechendenGPUBindGroup-Eintrags entspricht. Darüber hinaus entspricht es demn-Indexwert des entsprechenden@binding(n)-Attributs im Shader (GPUShaderModule), das in der zugehörigen Pipeline verwendet wird. visibility-
Ein oder mehrere Bitmaskenflags, die die Shader-Stufen definieren, für die ein
GPUBindGroup-Eintrag sichtbar ist, der diesem Eintrag entspricht. Mögliche Werte sind:GPUShaderStage.COMPUTE: Der Bindungseintrag wird für Compute-Shader zugänglich sein.GPUShaderStage.FRAGMENT: Der Bindungseintrag wird für Fragment-Shader zugänglich sein.GPUShaderStage.VERTEX: Der Bindungseintrag wird für Vertex-Shader zugänglich sein.
Beachten Sie, dass mehrere Stufen spezifiziert werden können, indem Werte mit bitweise ODER getrennt werden, zum Beispiel:
GPUShaderStage.FRAGMENT | GPUShaderStage.VERTEX. - "Ressourcen-Layout-Objekt"
-
Ein Objekt, das den erforderlichen Bindungsressourcentyp und die Struktur des
GPUBindGroup-Eintrags definiert, der diesem Eintrag entspricht. Diese Eigenschaft kann eines vonbuffer,externalTexture,sampler,storageTextureodertexturesein, deren Objektstrukturen im nächsten Abschnitt beschrieben werden.
Ressourcen-Layout-Objekte
Das Ressourcen-Layout-Objekt kann eines der folgenden sein (siehe auch GPUDevice.createBindGroup() für Details, wie die erforderlichen Ressourcen für jeden Eintrag strukturiert sind):
-
buffer: Gibt an, dass der entsprechendeGPUBindGroup-Eintrag einGPUBufferBinding-Objekt ist, das einenGPUBufferplusoffset- undsize-Werte enthält. EinbufferRessourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:hasDynamicOffsetOptional-
Ein Boolean. Wenn auf
truegesetzt, zeigt es an, dass diese Bindung einen dynamischen Offset erfordert, beispielsweise wenn er während eines Aufrufs vonGPURenderPassEncoder.setBindGroup()festgelegt wird. Wenn ausgelassen, wirdhasDynamicOffsetstandardmäßig auffalsegesetzt. minBindingSizeOptional-
Eine Zahl, die die minimal zulässige Größe, in Bytes, gebundener Buffer angibt. Wenn ausgelassen, wird
minBindingSizestandardmäßig auf 0 gesetzt. Wenn der Wert 0 ist, wird die minimale Buffergröße während der Pipelinenerstellung ignoriert und stattdessen von ausgegebenen Zeichen-/Verteilkommandos validiert. typeOptional-
Ein enumerierter Wert, der den erforderlichen Typ für
GPUBuffers angibt, die an diese Bindung gebunden sind (sieheGPUDevice.createBuffer()für weitere Informationen zu Buffer-Typen). Mögliche Werte sind:"read-only-storage": Ein Nur-Lese-Buffer, erstellt mit einerusagevonGPUBufferUsage.STORAGE."storage": Ein beschreibbarer Buffer, erstellt mit einerusagevonGPUBufferUsage.STORAGE."uniform": Ein Buffer, erstellt mit einerusagevonGPUBufferUsage.UNIFORM.
Wenn ausgelassen, wird
typestandardmäßig auf"uniform"gesetzt.
-
externalTexture: Gibt an, dass der entsprechendeGPUBindGroup-Eintrag einGPUExternalTexture-Objekt ist. EinexternalTextureRessourcen-Layout-Objekt ist leer —{}. -
sampler: Gibt an, dass der entsprechendeGPUBindGroup-Eintrag einGPUSampler-Objekt ist. EinsamplerRessourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:typeOptional-
Ein enumerierter Wert, der den erforderlichen Typ für
GPUSamplers angibt, die an diese Bindung gebunden sind (sieheGPUDevice.createSampler()für weitere Informationen zu Sampler-Typen). Mögliche Werte sind:"comparison": Ein Vergleichs-Sampler."filtering": Ein Filter-Sampler."non-filtering": Ein Nicht-Filter-Sampler.
Wenn ausgelassen, wird
typestandardmäßig auf"filtering"gesetzt.
-
storageTexture: Gibt an, dass der entsprechendeGPUBindGroup-Eintrag einGPUTextureView-Objekt ist. EinstorageTextureRessourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:accessOptional-
Ein enumerierter Wert, der angibt, ob die an diese Bindung gebundenen Texturansichten für Lese- und/oder Schreibzugriff gebunden werden. Mögliche Werte sind:
"read-only": Ermöglicht WGSL-Code, Speichertexturen zu lesen."read-write": Ermöglicht WGSL-Code, Speichertexturen zu lesen und zu schreiben."write-only": Der Standardwert; ermöglicht WGSL-Code, in Speichertexturen zu schreiben.
Die
"read-only"und"read-write"Werte können nur verwendet werden, wenn die"readonly_and_readwrite_storage_textures"WGSL-Spracherweiterung inWGSLLanguageFeaturesvorhanden ist. Wenn dies nicht der Fall ist, wird einGPUValidationErrorerzeugt. format-
Ein enumerierter Wert, der das erforderliche Format der an diese Bindung gebundenen Texturansichten spezifiziert. Siehe die Spezifikation im Abschnitt Texturformate für alle verfügbaren
format-Werte. Siehe auch Tier 1 und Tier 2 Texturformate.Hinweis: Die Verwendung des
bgra8unorm-Formats für Nur-Lese-Speichertexturen ist veraltet. Die Spezifikation verbietet dies explizit, da dieses Format für Schreibzugriff gedacht ist und nicht portabel ist. Jegliche Browserunterstützung für diese Kombination wird als Bug angesehen. viewDimensionOptional-
Ein enumerierter Wert, der die erforderliche Dimension für an diese Bindung gebundene Texturansichten spezifiziert. Mögliche Werte sind:
"1d": Die Textur wird als eindimensionales Bild betrachtet."2d": Die Textur wird als einzelnes zweidimensionales Bild betrachtet."2d-array": Die Textur wird als Array von zweidimensionalen Bildern betrachtet."cube": Die Textur wird als Würfelkarte betrachtet. Die Ansicht hat 6 Array-Ebenen, die den[+X, -X, +Y, -Y, +Z, -Z]-Flächen des Würfels entsprechen. Das Abtasten erfolgt nahtlos über die Flächen der Würfelkarte."cube-array": Die Textur wird als gepacktes Array vonnWürfelkarten betrachtet, jede mit 6 Array-Ebenen, die den[+X, -X, +Y, -Y, +Z, -Z]-Flächen des Würfels entsprechen. Das Abtasten erfolgt nahtlos über die Flächen der Würfelkarten."3d": Die Textur wird als dreidimensionales Bild betrachtet.
Wenn ausgelassen, wird
viewDimensionstandardmäßig auf"2d"gesetzt.
-
texture: Gibt an, dass der entsprechendeGPUBindGroup-Eintrag einGPUTextureView-Objekt ist. EintextureRessourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:multisampledOptional-
Ein Boolean. Ein Wert von
truegibt an, dass die an diese Bindung gebundenen Texturansichten multi-abgetastet sein müssen. Wenn ausgelassen, wirdmultisampledstandardmäßig auffalsegesetzt. sampleTypeOptional-
Ein enumerierter Wert, der den erforderlichen Abtasttyp für an diese Bindung gebundene Texturansichten spezifiziert (siehe
GPUDevice.createTexture()für weitere Informationen über Texturansichtstypen). Mögliche Werte sind:"depth""float""sint""uint""unfilterable-float"
Wenn ausgelassen, wird
sampleTypestandardmäßig auf"float"gesetzt. viewDimensionOptional-
Ein enumerierter Wert, der die erforderliche Dimension für an diese Bindung gebundene Texturansichten spezifiziert. Mögliche und Standardwerte sind die gleichen wie für
storageTextureRessourcen-Layout-Objekte — siehe oben.
Rückgabewert
Eine Instanz des GPUBindGroupLayout-Objekts.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn createBindGroupLayout() aufgerufen wird, andernfalls wird ein GPUValidationError erzeugt, und ein ungültiges GPUBindGroupLayout-Objekt wird zurückgegeben:
- Jeder Eintrag hat einen eindeutigen
binding-Wert. - Jeder Eintrag hat einen
binding-Wert, der kleiner als dasmaxBindingsPerBindGroupLimit desGPUDeviceist. - Die Anzahl der Einträge überschreitet nicht die Bindungsslotbeschränkungen.
- Nur ein Ressourcen-Layout-Objekt ist pro Eintrag definiert.
- Wenn die
visibilityeines EintragsGPUShaderStage.VERTEXenthält:- Wenn das Ressourcen-Layout-Objekt ein
bufferist, ist seintypenicht"storage". - Sein Ressourcen-Layout-Objekt ist kein
storageTexture.
- Wenn das Ressourcen-Layout-Objekt ein
- Wenn das Ressourcen-Layout-Objekt eines Eintrags ein
textureist und seinmultisampled-Werttrueist:- Seine
viewDimensionist"2d". - Sein
sampleTypeist nicht"float".
- Seine
- Wenn das Ressourcen-Layout-Objekt eines Eintrags ein
storageTextureist:- Seine
viewDimensionist nicht"cube"oder"cube-array". - Sein
formatist ein Format, das Speicherverwendung unterstützt.
- Seine
Beispiele
Hinweis: Die WebGPU-Beispiele bieten viele weitere Beispiele.
Einfaches Beispiel
Unser einfaches Compute-Demo zeigt ein Beispiel für die Erstellung eines Bindungsgruppenlayouts und dessen Verwendung als Vorlage bei der Erstellung einer Bindungsgruppe.
// …
const bindGroupLayout = device.createBindGroupLayout({
entries: [
{
binding: 0,
visibility: GPUShaderStage.COMPUTE,
buffer: {
type: "storage",
},
},
],
});
const bindGroup = device.createBindGroup({
layout: bindGroupLayout,
entries: [
{
binding: 0,
resource: {
buffer: output,
},
},
],
});
// …
Spezifikationen
| Specification |
|---|
| WebGPU> # dom-gpudevice-createbindgrouplayout> |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API