GPUDevice: createBindGroup() 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 createBindGroup()
Methode der GPUDevice
-Schnittstelle erstellt eine GPUBindGroup
basierend auf einem GPUBindGroupLayout
, welches eine Gruppe von Ressourcen definiert, die zusammen gebunden und in Shader-Stufen verwendet werden.
Syntax
createBindGroup(descriptor)
Parameter
descriptor
-
Ein Objekt, das die folgenden Eigenschaften enthält:
entries
-
Ein Array von Eintragsobjekten, die die Ressourcen beschreiben, die im Shader verfügbar gemacht werden sollen. Es wird eines für jeden entsprechenden Eintrag geben, der im
GPUBindGroupLayout
referenziert wird, das inlayout
angegeben ist. Jedes Eintragsobjekt hat folgende Eigenschaften:binding
-
Eine Zahl, die eine eindeutige Kennung für diese Ressourcenbindung darstellt und den
binding
-Wert eines entsprechendenGPUBindGroupLayout
-Eintrags entspricht. Außerdem entspricht es demn
-Indexwert des entsprechenden@binding(n)
-Attributs im Shader (GPUShaderModule
), das in der zugehörigen Pipeline verwendet wird. resource
-
Die zu bindende Ressource. Dies kann eine der folgenden sein:
GPUBufferBinding
(das einenGPUBuffer
umschließt; siehe GPUBufferBinding-Objekte für eine Definition)GPUExternalTexture
GPUSampler
GPUTextureView
; kann anstelle einerGPUExternalTexture
verwendet werden, vorausgesetzt, es ist kompatibel (ein 2D-Format mit einer einzelnen Subressource, d.h.dimension: "2d"
).
label
Optional-
Ein String, der ein Label bereitstellt, welches verwendet werden kann, um das Objekt zu identifizieren, beispielsweise in
GPUError
-Meldungen oder Konsolenwarnungen. layout
-
Das
GPUBindGroupLayout
, dem dieentries
dieser Bindungsgruppe entsprechen.
GPUBufferBinding-Objekte
Ein GPUBufferBinding
-Objekt kann folgende Eigenschaften enthalten:
buffer
-
Das
GPUBuffer
-Objekt, das Sie binden möchten. offset
Optional-
Der Offset, in Bytes, vom Beginn des
buffer
bis zum Beginn des Bereichs, der vom Pufferelement im Shader sichtbar gemacht wird. Wenn weggelassen, beträgtoffset
standardmäßig 0. size
Optional-
Die Größe, in Bytes, der Pufferelementbindung. Wenn weggelassen, ist
size
der Bereich, der beioffset
beginnt und am Ende desbuffer
endet. Wenn sowohloffset
als auchsize
weggelassen werden, wird der gesamte Puffer dem Shader sichtbar gemacht.
Rückgabewert
Eine Instanz eines GPUBindGroup
-Objekts.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn createBindGroup()
aufgerufen wird. Andernfalls wird ein GPUValidationError
generiert und ein ungültiges GPUBindGroup
-Objekt zurückgegeben:
- Die Anzahl der Einträge im
layout
GPUBindGroupLayout
entspricht der Anzahl der Eintragsobjekte inentries
. - Für jeden Eintrag im
layout
GPUBindGroupLayout
bindet das entsprechende Eintragsobjekt inentries
den richtigen Ressourcentyp. Zum Beispiel hat einbuffer
-Ressourcenlayoutobjekt einGPUBufferBinding
-Objekt, das im entsprechenden Binding angegeben ist. - Wenn das Ressourcenlayoutobjekt ein
buffer
ist:- Der entsprechende gebundene
GPUBuffer
:- Hat seinen gebundenen Teil (wie durch
offset
undsize
angegeben) vollständig innerhalb und mit einer nicht-null Grösse enthalten. - Hat eine Größe, die größer ist als
minBindingSize
desbuffer
-Ressourcenlayout.
- Hat seinen gebundenen Teil (wie durch
- Wenn der
type
des Ressourcenlayoutobjekts"uniform"
ist:- Hat der gebundene
GPUBuffer
einenusage
, derGPUBufferUsage.UNIFORM
enthält. - Ist die effektive Größe des gebundenen Puffersegments kleiner oder gleich dem
maxUniformBufferBindingSize
Limit desGPUDevice
. - Ist der spezifizierte
GPUBufferBinding
-offset
ein Vielfaches desminUniformBufferOffsetAlignment
Limits desGPUDevice
.
- Hat der gebundene
- Wenn der
type
des Ressourcenlayoutobjekts"storage"
oder"read-only-storage"
ist:- Hat der gebundene
GPUBuffer
einenusage
, derGPUBufferUsage.STORAGE
enthält. - Ist die effektive Größe des gebundenen Puffersegments kleiner oder gleich dem
maxStorageBufferBindingSize
Limit desGPUDevice
. - Ist die effektive Größe des gebundenen Puffersegments ein Vielfaches von 4.
- Ist der spezifizierte
GPUBufferBinding
-offset
ein Vielfaches desminStorageBufferOffsetAlignment
Limits desGPUDevice
.
- Hat der gebundene
- Der entsprechende gebundene
- Wenn das Ressourcenlayoutobjekt ein
storageTexture
ist, hat die entsprechende gebundeneGPUTextureView
:- Eine
dimension
, die derviewDimension
des Ressourcenlayoutobjekts entspricht (sieheGPUTexture.createView()
für mehr Details zu den Einstellungen einer Texture-View). - Ein
format
, das demsampleType
des Ressourcenlayoutobjekts entspricht. - Eine
mipLevelCount
von 1. - Ist eine Ansicht eines
GPUTexture
mit einerusage
, dieGPUTextureUsage.STORAGE_BINDING
enthält.
- Eine
- Wenn das Ressourcenlayoutobjekt eine
texture
ist, hat die entsprechende gebundeneGPUTextureView
:- Eine
dimension
, die derviewDimension
des Ressourcenlayoutobjekts entspricht (sieheGPUTexture.createView()
für mehr Details zu den Einstellungen einer Texture-View). - Ein
format
, das mit demsampleType
des Ressourcenlayoutobjekts kompatibel ist. - Ist eine Ansicht eines
GPUTexture
mit einerusage
, dieGPUTextureUsage.TEXTURE_BINDING
enthält. - Ist eine Ansicht eines
GPUTexture
mit einersampleCount
größer 1, wenn diemultisampled
-Eigenschaft des Ressourcenlayoutobjektstrue
ist, oder gleich 1, wenn siefalse
ist.
- Eine
Beispiele
Hinweis: Die WebGPU-Beispiele enthalten viele weitere Beispiele.
Einfaches Beispiel
Unser grundlegendes Berechnungsdemo zeigt ein Beispiel für die Erstellung eines Bindungsgruppenlayouts und dessen Verwendung als Vorlage beim Erstellen 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-createbindgroup |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API