GPUDevice: createBindGroupLayout() Methode
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 der GPUDevice Schnittstelle erstellt ein GPUBindGroupLayout, das die Struktur und den Zweck verwandter GPU-Ressourcen wie Puffer definiert, die in einer Pipeline verwendet werden sollen und als Vorlage beim Erstellen von GPUBindGroups dient.
Syntax
createBindGroupLayout(descriptor)
Parameter
descriptor-
Ein Objekt, das die folgenden Eigenschaften enthält:
entries-
Ein Array von Eintragsobjekten, jedes beschreibt eine einzelne Shader-Ressourcenbindung, die im
GPUBindGroupLayoutenthalten sein soll. Jeder Eintrag entspricht einem Eintrag, der in einerGPUBindGroupdefiniert ist (erstellt durch einen Aufruf vonGPUDevice.createBindGroup()), die diesesGPUBindGroupLayoutObjekt als Vorlage verwendet. labelOptional-
Ein String, der ein Label angibt, das verwendet werden kann, um das Objekt beispielsweise in
GPUErrorMeldungen oder Konsolenwarnungen zu identifizieren.
Eintragsobjekte
Ein Eintragsobjekt enthält die folgenden Eigenschaften:
binding-
Eine Zahl, die einen eindeutigen Bezeichner für diesen speziellen Eintrag darstellt, der dem
binding-Wert eines entsprechendenGPUBindGroupEintrags entspricht. Darüber hinaus stimmt er mit demn-Index-Wert des entsprechenden@binding(n)Attributs im Shader (GPUShaderModule) überein, das in der zugehörigen Pipeline verwendet wird. visibility-
Ein oder mehrere bitweise Flags, die die Shader-Stufen definieren, für die ein
GPUBindGroupEintrag, der diesem Eintrag entspricht, sichtbar sein wird. 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 angegeben werden können, indem Werte mit bitwise OR getrennt werden, zum Beispiel:
GPUShaderStage.FRAGMENT | GPUShaderStage.VERTEX. - "Resource layout object"
-
Ein Objekt, das den erforderlichen Bindungsressourcentyp und die Struktur des
GPUBindGroupEintrags definiert, der diesem Eintrag entspricht. Diese Eigenschaft kann eines der folgenden sein:buffer,externalTexture,sampler,storageTextureodertexture. Die Objektstrukturen werden im nächsten Abschnitt beschrieben.
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 entsprechendeGPUBindGroupEintrag einGPUBufferBindingObjekt sein wird, das einGPUBuffersowieoffsetundsizeWerte enthält. EinbufferRessourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:hasDynamicOffsetOptional-
Ein boolean. Wenn auf
truegesetzt, zeigt es an, dass für diese Bindung ein dynamischer Offset erforderlich ist, beispielsweise wie während eines Aufrufs vonGPURenderPassEncoder.setBindGroup()festgelegt. Wenn nicht angegeben, isthasDynamicOffsetstandardmäßigfalse. minBindingSizeOptional-
Eine Zahl, die die minimal zulässige Größe, in Bytes, der gebundenen Puffer angibt. Wenn nicht angegeben, ist
minBindingSizestandardmäßig 0. Wenn der Wert 0 ist, wird die Mindestpuffergröße während der Pipelinenerstellung ignoriert und stattdessen durch erteilte Zeichnen/Ausführen-Befehle 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 Pufferarten). Mögliche Werte sind:"read-only-storage": Ein nur lesbarer Puffer, der mit einerusagevonGPUBufferUsage.STORAGEerstellt wurde."storage": Ein beschreibbarer Puffer, der mit einerusagevonGPUBufferUsage.STORAGEerstellt wurde."uniform": Ein Puffer, der mit einerusagevonGPUBufferUsage.UNIFORMerstellt wurde.
Wenn nicht angegeben, ist
typestandardmäßig"uniform".
-
externalTexture: Gibt an, dass der entsprechendeGPUBindGroupEintrag einGPUExternalTextureObjekt sein wird. EinexternalTextureRessourcen-Layout-Objekt ist leer —{}. -
sampler: Gibt an, dass der entsprechendeGPUBindGroupEintrag einGPUSamplerObjekt sein wird. 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 Samplertypen). Mögliche Werte sind:"comparison": Ein Vergleichs-Sampler."filtering": Ein Filterungs-Sampler."non-filtering": Ein Nicht-Filterungs-Sampler.
Wenn nicht angegeben, ist
typestandardmäßig"filtering".
-
storageTexture: Gibt an, dass der entsprechendeGPUBindGroupEintrag einGPUTextureViewObjekt sein wird. EinstorageTextureRessourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:accessOptional-
Ein enumerierter Wert, der angibt, ob Texturansichten, die an diese Bindung gebunden sind, für Lese- und/oder Schreibzugriff gebunden werden. Mögliche Werte sind:
"read-only": Ermöglicht es WGSL-Code, Speichertexturen zu lesen."read-write": Ermöglicht es WGSL-Code, Speichertexturen zu lesen und zu schreiben."write-only": Der Standardwert; ermöglicht es 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. Andernfalls wird einGPUValidationErrorgeneriert. format-
Ein enumerierter Wert, der das erforderliche Format der an diese Bindung gebundenen Texturansichten angibt. Siehe den Abschnitt Texturformate der Spezifikation für alle verfügbaren
formatWerte. Siehe auch Tier 1 und Tier 2 Texturformate. viewDimensionOptional-
Ein enumerierter Wert, der die erforderliche Dimension für die an diese Bindung gebundenen Texturansichten angibt. 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 zweidimensionaler Bilder betrachtet."cube": Die Textur wird als Würfelkarte betrachtet. Die Ansicht hat 6 Array-Layer, die den[+X, -X, +Y, -Y, +Z, -Z]Flächen des Würfels entsprechen. Abtastung erfolgt nahtlos über die Flächen der Würfelkarte."cube-array": Die Textur wird als gepacktes Array vonnWürfelkarten betrachtet, jede mit 6 Array-Layern, die den[+X, -X, +Y, -Y, +Z, -Z]Flächen des Würfels entsprechen. Abtastung erfolgt nahtlos über die Flächen der Würfelkarten."3d": Die Textur wird als dreidimensionales Bild betrachtet.
Wenn nicht angegeben, ist
viewDimensionstandardmäßig"2d".
-
texture: Gibt an, dass der entsprechendeGPUBindGroupEintrag einGPUTextureViewObjekt sein wird. EintextureRessourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:multisampledOptional-
Ein boolean. Ein Wert von
truegibt an, dass Texturansichten, die an diese Bindung gebunden sind, multi-gesampelt sein müssen. Wenn nicht angegeben, istmultisampledstandardmäßigfalse. sampleTypeOptional-
Ein enumerierter Wert, der den erforderlichen Sample-Typ für die an diese Bindung gebundenen Texturansichten angibt (siehe
GPUDevice.createTexture()für mehr Informationen zu Texturansichtstypen). Mögliche Werte sind:"depth""float""sint""uint""unfilterable-float"
Wenn nicht angegeben, ist
sampleTypestandardmäßig"float". viewDimensionOptional-
Ein enumerierter Wert, der die erforderliche Dimension für die an diese Bindung gebundenen Texturansichten angibt. Mögliche und Standardwerte sind die gleichen wie für
storageTextureRessourcen-Layout-Objekte — siehe oben.
Rückgabewert
Ein GPUBindGroupLayout Objektinstanz.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn createBindGroupLayout() aufgerufen wird, sonst wird ein GPUValidationError generiert und ein ungültiges GPUBindGroupLayout Objekt zurückgegeben:
- Der
binding-Wert jedes Eintrags ist eindeutig. - Der
binding-Wert jedes Eintrags ist kleiner als derGPUDevicemaxBindingsPerBindGroupGrenzwert. - Die Anzahl der Einträge überschreitet nicht die Bindingslot-Limits.
- Nur ein Ressourcen-Layout-Objekt ist pro Eintrag definiert.
- Wenn die
visibilityeines EintragsGPUShaderStage.VERTEXumfasst:- Ist sein Ressourcen-Layout-Objekt ein
buffer, ist seintypenicht"storage". - Sein Ressourcen-Layout-Objekt ist kein
storageTexture.
- Ist sein Ressourcen-Layout-Objekt ein
- Wenn das Ressourcen-Layout-Objekt eines Eintrags ein
textureist und seinmultisampledWerttrueist:- Ist seine
viewDimension"2d". - Sein
sampleTypeist nicht"float".
- Ist seine
- Wenn das Ressourcen-Layout-Objekt eines Eintrags ein
storageTextureist:- Ist seine
viewDimensionweder"cube"noch"cube-array". - Sein
formatist ein Format, das die Benutzung als Speicher unterstützt.
- Ist 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
Loading…
Siehe auch
- Die WebGPU API