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