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 Buffer definiert, die in einer Pipeline verwendet werden sollen, und dient als Vorlage bei der Erstellung von GPUBindGroup
s.
Syntax
createBindGroupLayout(descriptor)
Parameter
descriptor
-
Ein Objekt, das die folgenden Eigenschaften enthält:
entries
-
Ein Array von Entry-Objekten, von denen jedes eine einzelne Shader-Ressourcenbindung beschreibt, die in das
GPUBindGroupLayout
eingeschlossen werden soll. Jedes Entry entspricht einem Entry, das in einerGPUBindGroup
definiert ist (erstellt über einenGPUDevice.createBindGroup()
-Aufruf), das diesesGPUBindGroupLayout
-Objekt als Vorlage verwendet. label
Optional-
Ein String, der ein Label bereitstellt, das zur Identifikation des Objekts, zum Beispiel in
GPUError
-Meldungen oder Konsolenwarnungen, verwendet werden kann.
Entry-Objekte
Ein Entry-Objekt umfasst die folgenden Eigenschaften:
binding
-
Eine Zahl, die einen eindeutigen Bezeichner für dieses spezielle Entry darstellt, das mit dem
binding
-Wert eines entsprechendenGPUBindGroup
-Entries übereinstimmt. Zusätzlich stimmt es mit demn
-Indexwert des entsprechenden@binding(n)
-Attributs im Shader (GPUShaderModule
), der in der zugehörigen Pipeline verwendet wird, überein. visibility
-
Ein oder mehrere bitweise Flags, die die Shader-Stufen definieren, denen ein
GPUBindGroup
-Entry entsprechend diesem Entry sichtbar sein wird. Mögliche Werte sind:GPUShaderStage.COMPUTE
: Der Bind-Group-Eintrag wird für Compute-Shader zugänglich sein.GPUShaderStage.FRAGMENT
: Der Bind-Group-Eintrag wird für Fragment-Shader zugänglich sein.GPUShaderStage.VERTEX
: Der Bind-Group-Eintrag wird für Vertex-Shader zugänglich sein.
Beachten Sie, dass mehrere Stufen angegeben werden können, indem die Werte mit bitweise ODER verknüpft werden, z. B.:
GPUShaderStage.FRAGMENT | GPUShaderStage.VERTEX
. - "Ressourcen-Layout-Objekt"
-
Ein Objekt, das den erforderlichen Bindungsressourcentyp und die Struktur des
GPUBindGroup
-Entries entsprechend diesem Entry definiert. Diese Eigenschaft kann eines vonbuffer
,externalTexture
,sampler
,storageTexture
odertexture
sein, die Objektstruktur wird im nächsten Abschnitt beschrieben.
Ressourcen-Layout-Objekte
Das Ressourcen-Layout-Objekt kann eines der folgenden sein (siehe auch GPUDevice.createBindGroup()
für Details zur Struktur der erforderlichen Ressourcen für jedes Entry):
-
buffer
: Gibt an, dass das entsprechendeGPUBindGroup
-Entry einGPUBufferBinding
-Objekt sein wird, das einenGPUBuffer
plusoffset
- undsize
-Werte enthält. Einbuffer
Ressourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:hasDynamicOffset
Optional-
Ein Boolean. Wenn auf
true
gesetzt, gibt dies an, dass diese Bindung einen dynamischen Offset erfordert, beispielsweise während einesGPURenderPassEncoder.setBindGroup()
-Aufrufs festgelegt wird. Wenn weggelassen, isthasDynamicOffset
standardmäßigfalse
. minBindingSize
Optional-
Eine Zahl, die die minimal zulässige Größe in Bytes der gebundenen Buffer angibt. Wenn weggelassen, ist
minBindingSize
standardmäßig 0. Wenn der Wert 0 ist, wird die minimale Buffer-Größe während der Pipeline-Erstellung ignoriert und stattdessen durch ausgegebene Zeichen-/Verteilbefehle 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 Buffer-Typen). Mögliche Werte sind:"read-only-storage"
: Ein schreibgeschützter Buffer, der mit einerusage
vonGPUBufferUsage.STORAGE
erstellt wurde."storage"
: Ein beschreibbarer Buffer, der mit einerusage
vonGPUBufferUsage.STORAGE
erstellt wurde."uniform"
: Ein Buffer, der mit einerusage
vonGPUBufferUsage.UNIFORM
erstellt wurde.
Wenn weggelassen, ist
type
standardmäßig"uniform"
.
-
externalTexture
: Gibt an, dass das entsprechendeGPUBindGroup
-Entry einGPUExternalTexture
-Objekt sein wird. EinexternalTexture
Ressourcen-Layout-Objekt ist leer —{}
. -
sampler
: Gibt an, dass das entsprechendeGPUBindGroup
-Entry 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-Typen). Mögliche Werte sind:"comparison"
: Ein Vergleichssampler."filtering"
: Ein Filterungssampler."non-filtering"
: Ein Nicht-Filterungssampler.
Wenn weggelassen, ist
type
standardmäßig"filtering"
.
-
storageTexture
: Gibt an, dass das entsprechendeGPUBindGroup
-Entry einGPUTextureView
-Objekt sein wird. EinstorageTexture
Ressourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:access
Optional-
Ein enumerierter Wert, der angibt, ob Texturbilder, die an diese Bindung gebunden sind, für Lese- und/oder Schreibzugriff gebunden werden. Mögliche Werte sind:
"read-only"
: Erlaubt WGSL-Code, Speichertexturen zu lesen."read-write"
: Erlaubt WGSL-Code, Speichertexturen zu lesen und zu schreiben."write-only"
: Der Standardwert; Erlaubt WGSL-Code, Speichertexturen zu schreiben.
Die
"read-only"
und"read-write"
Werte können nur verwendet werden, wenn die"readonly_and_readwrite_storage_textures"
WGSL-Spracherweiterung inWGSLLanguageFeatures
vorhanden ist. Andernfalls wird einGPUValidationError
erzeugt. format
-
Ein enumerierter Wert, der das erforderliche Format der an diese Bindung gebundenen Texturbilder angibt. Siehe den „Texture Formats“ Abschnitt der Spezifikation für alle verfügbaren
format
Werte. viewDimension
Optional-
Ein enumerierter Wert, der die erforderliche Dimension für Texturbilder, die an diese Bindung gebunden sind, 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 von zweidimensionalen Bildern betrachtet."cube"
: Die Textur wird als Cubemap betrachtet. Die Ansicht hat 6 Array-Schichten, die den[+X, -X, +Y, -Y, +Z, -Z]
Flächen des Würfels entsprechen. Das Samplen erfolgt nahtlos über die Flächen des Cubemaps hinweg."cube-array"
: Die Textur wird als gepacktes Array vonn
Cubemaps betrachtet, jede mit 6 Array-Schichten, die den[+X, -X, +Y, -Y, +Z, -Z]
Flächen des Würfels entsprechen. Das Samplen erfolgt nahtlos über die Flächen der Cubemaps hinweg."3d"
: Die Textur wird als dreidimensionales Bild betrachtet.
Wenn weggelassen, ist
viewDimension
standardmäßig"2d"
.
-
texture
: Gibt an, dass das entsprechendeGPUBindGroup
-Entry einGPUTextureView
-Objekt sein wird. Eintexture
Ressourcen-Layout-Objekt kann die folgenden Eigenschaften enthalten:multisampled
Optional-
Ein Boolean. Ein Wert von
true
gibt an, dass Texturbilder, die an diese Bindung gebunden sind, mehrfach abgetastet werden müssen. Wenn weggelassen, istmultisampled
standardmäßigfalse
. sampleType
Optional-
Ein enumerierter Wert, der den erforderlichen Abtasttyp für die an diese Bindung gebundenen Texturbilder angibt (siehe
GPUDevice.createTexture()
für weitere Informationen zu Texturansichtstypen). Mögliche Werte sind:"depth"
"float"
"sint"
"uint"
"unfilterable-float"
Wenn weggelassen, ist
sampleType
standardmäßig"float"
. viewDimension
Optional-
Ein enumerierter Wert, der die erforderliche Dimension für Texturbilder, die an diese Bindung gebunden sind, 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 eingehalten werden, wenn createBindGroupLayout()
aufgerufen wird, andernfalls wird ein GPUValidationError
erzeugt und ein ungültiges GPUBindGroupLayout
-Objekt zurückgegeben:
- Der
binding
-Wert jedes Entries ist einzigartig. - Der
binding
-Wert jedes Entries ist kleiner als dasGPUDevice
'smaxBindingsPerBindGroup
Limit. - Die Anzahl der Entries überschreitet nicht die binding slot limits.
- Es ist nur ein Ressourcen-Layout-Objekt pro Entry definiert.
- Wenn die
visibility
eines EntriesGPUShaderStage.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 Entries ein
texture
ist und seinmultisampled
Werttrue
ist:- Seine
viewDimension
ist"2d"
. - Sein
sampleType
ist nicht"float"
.
- Seine
- Wenn das Ressourcen-Layout-Objekt eines Entries ein
storageTexture
ist:- Seine
viewDimension
ist weder"cube"
noch"cube-array"
. - Sein
format
ist ein Format, das die Speicherverwendung unterstützt.
- Seine
Beispiele
Hinweis: Die WebGPU Samples enthalten viele weitere Beispiele.
Einfaches Beispiel
Unser einfaches Compute-Demo zeigt ein Beispiel für die Erstellung 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