GPUDevice: Methode createBindGroupLayout()
Limited availability
This feature is not Baseline because it does not work in some of the most widely-used browsers.
Experimentell: Dies ist eine experimentelle Technologie
Überprüfen Sie die Browser-Kompatibilitätstabelle sorgfältig, bevor Sie diese produktiv verwenden.
Sicherer Kontext: Diese Funktion ist nur in sicheren Kontexten (HTTPS) in einigen oder allen unterstützenden Browsern verfügbar.
Hinweis: Dieses Feature ist verfügbar in Web Workers.
Die createBindGroupLayout()
-Methode der GPUDevice
-Schnittstelle erstellt ein GPUBindGroupLayout
, das die Struktur und den Zweck verwandter GPU-Ressourcen wie Buffern definiert, die in einer Pipeline verwendet werden und dient als Vorlage beim Erstellen von GPUBindGroup
s.
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 im
GPUBindGroupLayout
enthalten sein soll. Jeder Eintrag entspricht einem in einerGPUBindGroup
(erstellt über einenGPUDevice.createBindGroup()
Aufruf) definierten Eintrag, der diesesGPUBindGroupLayout
-Objekt als Vorlage verwendet. label
Optional-
Ein String, der ein Label bereitstellt, das verwendet werden kann, um das Objekt zu identifizieren, beispielsweise in
GPUError
-Meldungen oder Konsolenwarnungen.
Eintragsobjekte
Ein Eintragsobjekt enthält die folgenden Eigenschaften:
binding
-
Eine Zahl, die eine eindeutige Kennung für diesen speziellen Eintrag darstellt, die mit dem
binding
-Wert eines entsprechendenGPUBindGroup
-Eintrags übereinstimmt. Zusätzlich entspricht es demn
-Indexwert des entsprechenden@binding(n)
-Attributs im Shader (GPUShaderModule
), das in der zugehörigen Pipeline verwendet wird. visibility
-
Ein oder mehrere Bitweise Flaggen, die die Shader-Stufen definieren, für die ein
GPUBindGroup
-Eintrag sichtbar sein wird, der diesem Eintrag entspricht. Mögliche Werte sind:GPUShaderStage.COMPUTE
: Der Bindungsgruppeneintrag wird für Compu-Shader zugänglich sein.GPUShaderStage.FRAGMENT
: Der Bindungsgruppeneintrag wird für Fragment-Shader zugänglich sein.GPUShaderStage.VERTEX
: Der Bindungsgruppeneintrag wird für Vertex-Shader zugänglich sein.
Beachten Sie, dass mehrere Stufen durch Trennzeichen mit Pipe-Symbolen angegeben werden können, zum Beispiel:
jsvisibility: 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
,storageTexture
odertexture
sein, 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
: Zeigt an, dass der entsprechendeGPUBindGroup
-Eintrag einGPUBufferBinding
-Objekt sein wird, das einenGPUBuffer
sowieoffset
- undsize
-Werte enthält. Einbuffer
-Ressourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:hasDynamicOffset
Optional-
Ein boolescher Wert. Wenn auf
true
gesetzt, zeigt dies an, dass diese Bindung einen dynamischen Offset erfordert, beispielsweise wie während einesGPURenderPassEncoder.setBindGroup()
-Aufrufs festgelegt. Wenn weggelassen, wirdhasDynamicOffset
auffalse
gesetzt. minBindingSize
Optional-
Eine Zahl, die die minimale erlaubte Größe in Bytes von gebundenen Buffern angibt. Wenn weggelassen, wird
minBindingSize
auf 0 gesetzt. Wenn der Wert 0 ist, wird die Mindestpuffergröße während der Pipelinenerstellung ignoriert und stattdessen durch ausgegebene Zeichen/Distributionsbefehle validiert. type
Optional-
Ein enumerierter Wert, der den erforderlichen Typ für
GPUBuffer
s angibt, 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 einerusage
vonGPUBufferUsage.STORAGE
erstellt wurde."storage"
: Ein beschreibbarer Puffer, der mit einerusage
vonGPUBufferUsage.STORAGE
erstellt wurde."uniform"
: Ein Puffer, der mit einerusage
vonGPUBufferUsage.UNIFORM
erstellt wurde.
Wenn weggelassen, wird
type
auf"uniform"
gesetzt.
-
externalTexture
: Zeigt an, dass der entsprechendeGPUBindGroup
-Eintrag einGPUExternalTexture
-Objekt sein wird. EinexternalTexture
-Ressourcen-Layout-Objekt ist leer —{}
. -
sampler
: Zeigt an, dass der entsprechendeGPUBindGroup
-Eintrag einGPUSampler
-Objekt sein wird. Einsampler
-Ressourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:type
Optional-
Ein enumerierter Wert, der den erforderlichen Typ für
GPUSampler
s angibt, die an diese Bindung gebunden sind (sieheGPUDevice.createSampler()
für weitere Informationen zu Sampler-Arten). Mögliche Werte sind:"comparison"
: Ein Vergleichssampler."filtering"
: Ein Filtersampler."non-filtering"
: Ein nicht filternder Sampler.
Wenn weggelassen, wird
type
auf"filtering"
gesetzt.
-
storageTexture
: Zeigt an, dass der entsprechendeGPUBindGroup
-Eintrag einGPUTextureView
-Objekt sein wird. EinstorageTexture
-Ressourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:access
Optional-
Ein enumerierter Wert, der angibt, ob Texturansichten, die an diese Bindung gebunden sind, für Lese- und/oder Schreibzugriff gebunden werden. Derzeit sind die möglichen Werte
"write-only"
undundefined
, mit der Absicht, in Zukunft weitere Zugriffsmodi hinzuzufügen. Wenn weggelassen, ist der Standardwert"write-only"
. format
-
Ein enumerierter Wert, der das erforderliche Format von Texturansichten angibt, die an diese Bindung gebunden sind. Siehe den Texturformate-Abschnitt der Spezifikation für alle verfügbaren
format
-Werte. viewDimension
Optional-
Ein enumerierter Wert, der die erforderliche Dimension für Texturansichten angibt, die an diese Bindung gebunden sind. 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 ein Array zweidimensionaler Bilder betrachtet."cube"
: Die Textur wird als Kubemap betrachtet. Die Ansicht hat 6 Array-Ebenen, die den[+X, -X, +Y, -Y, +Z, -Z]
-Flächen des Würfels entsprechen. Die Abtastung erfolgt nahtlos über die Flächen der Kubemap."cube-array"
: Die Textur wird als gepacktes Array vonn
Kubemaps betrachtet, jede mit 6 Array-Ebenen, die den[+X, -X, +Y, -Y, +Z, -Z]
-Flächen des Würfels entsprechen. Die Abtastung erfolgt nahtlos über die Flächen der Kubemaps."3d"
: Die Textur wird als dreidimensionales Bild betrachtet.
Wenn weggelassen, wird
viewDimension
auf"2d"
gesetzt.
-
texture
: Zeigt an, dass der entsprechendeGPUBindGroup
-Eintrag einGPUTextureView
-Objekt sein wird. Eintexture
-Ressourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:multisampled
Optional-
Ein boolescher Wert. Ein Wert von
true
zeigt an, dass Texturansichten, die an diese Bindung gebunden sind, multiplabgenommen sein müssen. Wenn weggelassen, wirdmultisampled
auffalse
gesetzt. sampleType
Optional-
Ein enumerierter Wert, der den erforderlichen Stichprobentyp für Texturansichten angibt, die an diese Bindung gebunden sind (siehe
GPUDevice.createTexture()
für weitere Informationen zu Texturansichtstypen). Mögliche Werte sind:"depth"
"float"
"sint"
"uint"
"unfilterable-float"
Wenn weggelassen, wird
sampleType
auf"float"
gesetzt. viewDimension
Optional-
Ein enumerierter Wert, der die erforderliche Dimension für Texturansichten angibt, die an diese Bindung gebunden sind. Mögliche und Standardwerte sind die gleichen wie für
storageTexture
-Ressourcen-Layout-Objekte – siehe oben.
Rückgabewert
Ein GPUBindGroupLayout
-Objektinstanz.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn createBindGroupLayout()
aufgerufen wird, andernfalls wird ein GPUValidationError
generiert und ein ungültiges GPUBindGroupLayout
-Objekt zurückgegeben:
- Jeder
binding
-Wert eines Eintrags ist eindeutig. - Jeder
binding
-Wert eines Eintrags ist kleiner als dasGPUDevice
'smaxBindingsPerBindGroup
-Limit. - Die Anzahl der Einträge überschreitet nicht die Bindungs-Slot-Limits.
- Pro Eintrag ist nur 1 Ressourcen-Layout-Objekt definiert.
- Wenn die
visibility
eines EintragsGPUShaderStage.VERTEX
enthält:- Wenn sein Ressourcen-Layout-Objekt ein
buffer
ist, ist seintype
nicht"storage"
. - Sein Ressourcen-Layout-Objekt ist kein
storageTexture
.
- Wenn sein Ressourcen-Layout-Objekt ein
- Wenn das Ressourcen-Layout-Objekt eines Eintrags ein
texture
ist und seinmultisampled
-Werttrue
ist:- Seine
viewDimension
ist"2d"
. - Sein
sampleType
ist nicht"float"
.
- Seine
- Wenn das Ressourcen-Layout-Objekt eines Eintrags ein
storageTexture
ist:- Seine
viewDimension
ist nicht"cube"
oder"cube-array"
. - Sein
format
ist ein Format, das Speicherverwendung unterstützt.
- Seine
Beispiele
Hinweis: Die WebGPU-Beispiele enthalten 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
BCD tables only load in the browser
Siehe auch
- Die WebGPU API