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 und als Vorlage dient, 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-Resource-Bindung beschreibt, die in das
GPUBindGroupLayoutaufgenommen werden soll. Jeder Eintrag entspricht einem Eintrag, der in einerGPUBindGroupdefiniert ist (erstellt durch einen Aufruf vonGPUDevice.createBindGroup()), der diesesGPUBindGroupLayoutObjekt als Vorlage verwendet. labelOptional-
Ein String, der ein Label bereitstellt, das beispielsweise in
GPUError-Meldungen oder Konsolenwarnungen verwendet werden kann.
Eintragsobjekte
Ein Eintragsobjekt beinhaltet die folgenden Eigenschaften:
binding-
Eine Zahl, die eine eindeutige Kennung für diesen speziellen Eintrag darstellt und dem
binding-Wert eines entsprechendenGPUBindGroupEintrags entspricht. Zusätzlich entspricht es demn-Indexwert des entsprechenden@binding(n)Attributs im Shader (GPUShaderModule), der in der zugehörigen Pipeline verwendet wird. visibility-
Ein oder mehrere bitweise Flags, die die Shader-Stufen definieren, für die ein
GPUBindGroupEintrag sichtbar sein wird, 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 angegeben werden können, indem Werte mit bitwise OR getrennt werden, zum Beispiel:
GPUShaderStage.FRAGMENT | GPUShaderStage.VERTEX. - "Ressourcenlayout-Objekt"
-
Ein Objekt, das den erforderlichen Bindungs-Ressourcentyp und die Struktur des
GPUBindGroupEintrags definiert, der diesem Eintrag entspricht. Diese Eigenschaft kann eines der folgenden sein:buffer,externalTexture,sampler,storageTextureodertexture, deren Objektstrukturen im nächsten Abschnitt beschrieben werden.
Ressourcenlayout-Objekte
Das Ressourcenlayout-Objekt kann eines der folgenden sein (siehe auch GPUDevice.createBindGroup() für Details zur Strukturierung der erforderlichen Ressourcen für jeden Eintrag):
-
buffer: Gibt an, dass der entsprechendeGPUBindGroupEintrag einGPUBufferBindingObjekt sein wird, das einGPUBuffersowieoffsetundsizeWerte enthält. Einbuffer-Ressourcenlayout-Objekt kann die folgenden Eigenschaften enthalten:hasDynamicOffsetOptional-
Ein boolean. Wenn auf
truegesetzt, wird angezeigt, dass diese Bindung einen dynamischen Offset erfordert, wie er beispielsweise während einesGPURenderPassEncoder.setBindGroup()Aufrufs gesetzt wird. Wenn ausgelassen, isthasDynamicOffsetstandardmäßigfalse. minBindingSizeOptional-
Eine Zahl, die die minimal zulässige Größe in Bytes von gebundenen Puffern angibt. Wird sie weggelassen, ist
minBindingSizestandardmäßig 0. Wenn der Wert 0 ist, wird die minimale Puffergröße während der Pipeline-Erstellung ignoriert und stattdessen durch ausgegebene Zeichnen/Verteilen-Befehle validiert. typeOptional-
Ein enumerierter Wert, der den erforderlichen Typ für
GPUBuffers festlegt, die an diese Bindung gebunden sind (sieheGPUDevice.createBuffer()für weitere Informationen zu Pufferarten). Mögliche Werte sind:"read-only-storage": Ein schreibgeschützter Puffer, der mit einerusagevonGPUBufferUsage.STORAGEerstellt wurde."storage": Ein beschreibbarer Puffer, der mit einerusagevonGPUBufferUsage.STORAGEerstellt wurde."uniform": Ein Puffer, der mit einerusagevonGPUBufferUsage.UNIFORMerstellt wurde.
Wird sie ausgelassen, ist
typestandardmäßig"uniform".
-
externalTexture: Gibt an, dass der entsprechendeGPUBindGroupEintrag einGPUExternalTextureObjekt sein wird. EinexternalTexture-Ressourcenlayout-Objekt ist leer —{}. -
sampler: Gibt an, dass der entsprechendeGPUBindGroupEintrag einGPUSamplerObjekt sein wird. Einsampler-Ressourcenlayout-Objekt kann die folgenden Eigenschaften enthalten:typeOptional-
Ein enumerierter Wert, der den erforderlichen Typ für
GPUSamplers festlegt, die an diese Bindung gebunden sind (sieheGPUDevice.createSampler()für weitere Informationen zu Sampler-Typen). Mögliche Werte sind:"comparison": Ein Vergleichssampler."filtering": Ein Filtersampler."non-filtering": Ein nicht filternder Sampler.
Wird sie ausgelassen, ist
typestandardmäßig"filtering".
-
storageTexture: Gibt an, dass der entsprechendeGPUBindGroupEintrag einGPUTextureViewObjekt sein wird. EinstorageTexture-Ressourcenlayout-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 das Lesen von Speichertexturen."read-write": Ermöglicht WGSL-Code das Lesen und Schreiben in Speichertexturen."write-only": Der Standardwert; Ermöglicht WGSL-Code das Schreiben in Speichertexturen.
Die Werte
"read-only"und"read-write"können nur verwendet werden, wenn die"readonly_and_readwrite_storage_textures"WGSL-Sprachenerweiterung inWGSLLanguageFeaturesvorhanden ist. Andernfalls wird einGPUValidationErrorerzeugt. format-
Ein enumerierter Wert, der das erforderliche Format von Texturansichten angibt, die an diese Bindung gebunden werden. Siehe den Abschnitt Texture Formats der Spezifikation für alle verfügbaren
format-Werte. Siehe auch Tier 1 und Tier 2 Texturformate.Hinweis: Die Verwendung des
bgra8unormFormats für schreibgeschützte Speichertexturen ist veraltet. Die Spezifikation untersagt dies ausdrücklich, da dieses Format für den Schreibzugriff vorgesehen und nicht portabel ist. Jede Browserunterstützung für diese Kombination wird als Fehler angesehen. viewDimensionOptional-
Ein enumerierter Wert, der die erforderliche Dimension für Texturansichten angibt, die an diese Bindung gebunden werden. Mögliche Werte sind:
"1d": Die Textur wird als eindimensionales Bild betrachtet."2d": Die Textur wird als einzelnes zweidimensionales Bild angesehen."2d-array": Die Textur wird als ein Array von zweidimensionalen Bildern betrachtet."cube": Die Textur wird als Kubauszug betrachtet. Die Ansicht hat 6 Array-Ebenen, die den[+X, -X, +Y, -Y, +Z, -Z]-Flächen des Kubus entsprechen. Das Sampling erfolgt nahtlos über die Flächen des Kubauszugs."cube-array": Die Textur wird als gepacktes Array vonnKubauszügen betrachtet, von denen jeder 6 Array-Ebenen hat, die den[+X, -X, +Y, -Y, +Z, -Z]-Flächen des Kubus entsprechen. Das Sampling erfolgt nahtlos über die Flächen der Kubauszüge hinweg."3d": Die Textur wird als dreidimensionales Bild betrachtet.
Wird sie ausgelassen, ist
viewDimensionstandardmäßig"2d".
-
texture: Gibt an, dass der entsprechendeGPUBindGroupEintrag einGPUTextureViewObjekt sein wird. Eintexture-Ressourcenlayout-Objekt kann die folgenden Eigenschaften enthalten:multisampledOptional-
Ein boolean. Ein Wert von
truegibt an, dass Texturansichten, die an diese Bindung gebunden werden, mehrmals abgetastet werden müssen. Wird sie ausgelassen, istmultisampledstandardmäßigfalse. sampleTypeOptional-
Ein enumerierter Wert, der den erforderlichen Probentyp für Texturansichten festlegt, die an diese Bindung gebunden werden (siehe
GPUDevice.createTexture()für weitere Informationen zu Texturansichtstypen). Mögliche Werte sind:"depth""float""sint""uint""unfilterable-float"
Wird sie ausgelassen, ist
sampleTypestandardmäßig"float". viewDimensionOptional-
Ein enumerierter Wert, der die erforderliche Dimension für Texturansichten angibt, die an diese Bindung gebunden werden. Mögliche und Standardwerte sind die gleichen wie für
storageTexture-Ressourcenlayout-Objekte — siehe oben.
Rückgabewert
Eine Instanz eines GPUBindGroupLayout Objektes.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn createBindGroupLayout() aufgerufen wird, andernfalls wird ein GPUValidationError erzeugt und ein ungültiges GPUBindGroupLayout Objekt zurückgegeben:
- Der
bindingWert jedes Eintrags ist einzigartig. - Der
bindingWert jedes Eintrags ist kleiner als dasmaxBindingsPerBindGroupLimit desGPUDevice. - Die Anzahl der Einträge überschreitet nicht die binding slot limits.
- Pro Eintrag wird nur ein Ressourcenlayout-Objekt definiert.
- Wenn die
visibilityeines EintragsGPUShaderStage.VERTEXumfasst:- Wenn sein Ressourcenlayout-Objekt ein
bufferist, ist seintypenicht"storage". - Sein Ressourcenlayout-Objekt ist kein
storageTexture.
- Wenn sein Ressourcenlayout-Objekt ein
- Wenn das Ressourcenlayout-Objekt eines Eintrags ein
textureist und seinmultisampledWerttrueist:- Seine
viewDimensionist"2d". - Sein
sampleTypeist nicht"float".
- Seine
- Wenn das Ressourcenlayout-Objekt eines Eintrags ein
storageTextureist:- Seine
viewDimensionist weder"cube"noch"cube-array". - Sein
formatist ein Format, das die Nutzung für Speicher unterstützt.
- Seine
Beispiele
Hinweis: Die WebGPU Beispiele bieten viele weitere Beispiele.
Einfaches Beispiel
Unser einfaches Compute-Demo zeigt ein Beispiel für das Erstellen eines Bind Group Layouts und dessen Verwendung als Vorlage bei der Erstellung einer Bind Group.
// …
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