Dieser Inhalt wurde automatisch aus dem Englischen übersetzt, und kann Fehler enthalten.Erfahre mehr über dieses Experiment.
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 insicheren Kontexten (HTTPS) in einigen oder allenunterstützenden Browsern verfügbar.
Hinweis: Diese Funktion ist inWeb Workers verfügbar.
DiecreateBindGroupLayout()-Methode desGPUDevice-Interfaces erstellt einGPUBindGroupLayout, das die Struktur und den Zweck von verbundenen GPU-Ressourcen wie Buffern definiert, die in einer Pipeline verwendet werden, und wird als Vorlage verwendet, wennGPUBindGroups erstellt werden.
In diesem Artikel
Syntax
createBindGroupLayout(descriptor)Parameter
descriptorEin Objekt, das die folgenden Eigenschaften enthält:
entriesEin Array vonEintragsobjekten, 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.labelOptionalEin 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:
bindingEine 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.visibilityEin oder mehrereBitmaskenflags, 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 mitbitweise 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 auchGPUDevice.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:hasDynamicOffsetOptionalEin 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.minBindingSizeOptionalEine 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.typeOptionalEin 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:typeOptionalEin 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:accessOptionalEin 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.formatEin enumerierter Wert, der das erforderliche Format der an diese Bindung gebundenen Texturansichten spezifiziert. Siehe die Spezifikation im AbschnittTexturformate für alle verfügbaren
format-Werte. Siehe auchTier 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.viewDimensionOptionalEin 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:multisampledOptionalEin Boolean. Ein Wert von
truegibt an, dass die an diese Bindung gebundenen Texturansichten multi-abgetastet sein müssen. Wenn ausgelassen, wirdmultisampledstandardmäßig auffalsegesetzt.sampleTypeOptionalEin 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.viewDimensionOptionalEin 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 desGPUBindGroupLayout-Objekts.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenncreateBindGroupLayout() aufgerufen wird, andernfalls wird einGPUValidationError erzeugt, und ein ungültigesGPUBindGroupLayout-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 dieBindungsslotbeschrä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:DieWebGPU-Beispiele bieten viele weitere Beispiele.
Einfaches Beispiel
Unsereinfaches 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
- DieWebGPU API