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 vor der Verwendung auf produktiven Webseiten.
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 Methode createBindGroupLayout()
der GPUDevice
-Schnittstelle erstellt ein GPUBindGroupLayout
, das die Struktur und den Zweck der zugehörigen GPU-Ressourcen beschreibt, wie z.B. Puffer, die in einer Pipeline verwendet werden sollen. Es wird als Vorlage beim Erstellen von GPUBindGroup
s verwendet.
Syntax
createBindGroupLayout(descriptor)
Parameter
descriptor
-
Ein Objekt, das die folgenden Eigenschaften enthält:
entries
-
Ein Array von entry objects, von denen jedes eine einzelne Shader-Ressourcenbindung beschreibt, die in das
GPUBindGroupLayout
aufgenommen werden soll. Jedes Eintrag entspricht einem Eintrag, der in einerGPUBindGroup
definiert ist (erstellt über einen Aufruf vonGPUDevice.createBindGroup()
), die diesesGPUBindGroupLayout
-Objekt als Vorlage verwendet. label
Optional-
Ein String, der ein Label bereitstellt, das zur Identifizierung des Objekts verwendet werden kann, beispielsweise in
GPUError
-Nachrichten oder Konsolenwarnungen.
Eintragsobjekte
Ein Eintragsobjekt umfasst die folgenden Eigenschaften:
binding
-
Eine Zahl, die eine eindeutige Kennung für diesen bestimmten Eintrag darstellt und mit dem
binding
-Wert des entsprechendenGPUBindGroup
-Eintrags übereinstimmt. Darüber hinaus entspricht sie demn
-Indexwert des entsprechenden@binding(n)
-Attributs im Shader (GPUShaderModule
), der in der zugehörigen Pipeline verwendet wird. visibility
-
Ein oder mehrere bitwise flags, die die Shader-Stufen definieren, die einem
GPUBindGroup
-Eintrag entsprechen, der für diesen Eintrag sichtbar ist. Mögliche Werte sind:GPUShaderStage.COMPUTE
: Der Bindgruppen-Eintrag wird für Compute-Shader zugänglich sein.GPUShaderStage.FRAGMENT
: Der Bindgruppen-Eintrag wird für Fragment-Shader zugänglich sein.GPUShaderStage.VERTEX
: Der Bindgruppen-Eintrag wird für Vertex-Shader zugänglich sein.
Beachten Sie, dass mehrere Stufen durch Trennsymbole festgelegt 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 der folgenden sein:buffer
,externalTexture
,sampler
,storageTexture
odertexture
, 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 dazu, wie die erforderlichen Ressourcen für jeden Eintrag strukturiert sind):
-
buffer
: Gibt an, dass der entsprechendeGPUBindGroup
-Eintrag einGPUBufferBinding
-Objekt sein wird, das einGPUBuffer
sowieoffset
- undsize
-Werte enthält. Einbuffer
-Ressourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:hasDynamicOffset
Optional-
Ein boolean. Wenn auf
true
gesetzt, zeigt es an, dass diese Bindung einen dynamischen Offset erfordert, z.B. wie während eines Aufrufs vonGPURenderPassEncoder.setBindGroup()
festgelegt. Wenn ausgelassen, isthasDynamicOffset
standardmäßigfalse
. minBindingSize
Optional-
Eine Zahl, die die minimal erlaubte Größe in Bytes von gebundenen Puffern angibt. Wenn ausgelassen, ist
minBindingSize
standardmäßig 0. Wenn der Wert 0 ist, wird die Mindestpuffergröße bei der Erstellung der Pipeline ignoriert und stattdessen durch ausgegebene Zeichnungen/Dispatched-Kommandos validiert. type
Optional-
Ein enumerierter Wert, der den erforderlichen Typ für
GPUBuffer
s spezifiziert, die an diese Bindung gebunden sind (sieheGPUDevice.createBuffer()
für weitere Informationen zu Puffertypen). Mögliche Werte sind:"read-only-storage"
: Ein schreibgeschützter Puffer, der mit einemusage
vonGPUBufferUsage.STORAGE
erstellt wurde."storage"
: Ein beschreibbarer Puffer, der mit einemusage
vonGPUBufferUsage.STORAGE
erstellt wurde."uniform"
: Ein Puffer, der mit einemusage
vonGPUBufferUsage.UNIFORM
erstellt wurde.
Wenn ausgelassen, ist
type
standardmäßig"uniform"
.
-
externalTexture
: Gibt an, dass der entsprechendeGPUBindGroup
-Eintrag einGPUExternalTexture
-Objekt sein wird. EinexternalTexture
-Ressourcen-Layout-Objekt ist leer —{}
. -
sampler
: Gibt 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 spezifiziert, 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, ist
type
standardmäßig"filtering"
.
-
storageTexture
: Gibt an, dass der entsprechendeGPUBindGroup
-Eintrag einGPUTextureView
-Objekt sein wird. EinstorageTexture
-Ressourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:access
Optional-
Ein enumerierter Wert, der spezifiziert, 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 Speicher-Texturen."read-write"
: Ermöglicht WGSL-Code das Lesen und Schreiben in Speicher-Texturen."write-only"
: Der Standardwert; Ermöglicht WGSL-Code das Schreiben in Speicher-Texturen.
Die Werte
"read-only"
und"read-write"
können nur verwendet werden, wenn die"readonly_and_readwrite_storage_textures"
-WGSL-Spracherweiterung inWGSLLanguageFeatures
vorhanden ist. Falls dies nicht der Fall ist, wird einGPUValidationError
erzeugt. 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
format
-Werte. viewDimension
Optional-
Ein enumerierter Wert, der die erforderliche Dimension für an diese Bindung gebundene Texturansichten angibt. Mögliche Werte sind:
"1d"
: Die Textur wird als eindimensionales Bild betrachtet."2d"
: Die Textur wird als zweidimensionales Bild betrachtet."2d-array"
: Die Textur wird als ein Array zweidimensionaler Bilder betrachtet."cube"
: Die Textur wird als Kubenkarte betrachtet. Die Ansicht hat 6 Array-Ebenen, entsprechend den Gesichtstypen[+X, -X, +Y, -Y, +Z, -Z]
des Würfels. Die Abtastung erfolgt nahtlos über die Flächen des Kubus hinweg."cube-array"
: Die Textur wird als ein gepacktes Array vonn
Kubenkarten betrachtet, jede mit 6 Array-Ebenen, die den Gesichtstypen[+X, -X, +Y, -Y, +Z, -Z]
des Würfels entsprechen. Die Abtastung erfolgt nahtlos über die Flächen der Kuben hinweg."3d"
: Die Textur wird als dreidimensionales Bild betrachtet.
Wenn ausgelassen, ist
viewDimension
standardmäßig"2d"
.
-
texture
: Gibt an, dass der entsprechendeGPUBindGroup
-Eintrag einGPUTextureView
-Objekt sein wird. Eintexture
-Ressourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:multisampled
Optional-
Ein boolean. Ein Wert von
true
gibt an, dass an diese Bindung gebundene Texturansichten multi-sampled sein müssen. Wenn ausgelassen, istmultisampled
standardmäßigfalse
. sampleType
Optional-
Ein enumerierter Wert, der den erforderlichen Abtasttyp für an diese Bindung gebundene Texturansichten bestimmt (siehe
GPUDevice.createTexture()
für weitere Informationen zu Texturansichtstypen). Mögliche Werte sind:"depth"
"float"
"sint"
"uint"
"unfilterable-float"
Wenn ausgelassen, ist
sampleType
standardmäßig"float"
. viewDimension
Optional-
Ein enumerierter Wert, der die erforderliche Dimension für an diese Bindung gebundene Texturansichten angibt. 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 beim Aufruf von createBindGroupLayout()
erfüllt sein, andernfalls wird ein GPUValidationError
erzeugt und ein ungültiges GPUBindGroupLayout
-Objekt zurückgegeben:
- Der
binding
-Wert jedes Eintrags ist eindeutig. - Der
binding
-Wert jedes Eintrags ist kleiner als dasmaxBindingsPerBindGroup
-Limit desGPUDevice
Limits. - Die Anzahl der Einträge überschreitet nicht die binding slot limits.
- Nur 1 Ressourcen-Layout-Objekt ist pro Eintrag definiert.
- Wenn das
visibility
eines EintragsGPUShaderStage.VERTEX
umfasst:- 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 die Speicherverwendung unterstützt.
- Seine
Beispiele
Hinweis: Die WebGPU-Beispiele enthalten 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 beim Erstellen 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
BCD tables only load in the browser
Siehe auch
- Die WebGPU API