GPUDevice: createBindGroup()-Methode
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 createBindGroup()
-Methode des GPUDevice
-Interfaces erzeugt eine GPUBindGroup
basierend auf einem GPUBindGroupLayout
, das eine Menge von Ressourcen definiert, die in einer Gruppe gebunden werden sollen, und wie diese Ressourcen 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 dem Shader ausgesetzt werden sollen. Es gibt für jede entsprechende Eintragung, die im
layout
-Attribut durch dasGPUBindGroupLayout
beschrieben ist, eine Eintragung. Jedes Eintragsobjekt hat die folgenden Eigenschaften:binding
-
Eine Zahl, die eine eindeutige Kennung für diese Ressourcenzuordnung darstellt, und die dem
binding
-Wert eines entsprechendenGPUBindGroupLayout
-Eintrags entspricht. Außerdem entspricht dies demn
-Indexwert des entsprechenden@binding(n)
-Attributs im Shader (GPUShaderModule
), der in der zugehörigen Pipeline verwendet wird. resource
-
Die zu bindende Ressource. Dies kann eine der folgenden sein:
GPUBufferBinding
(welches einenGPUBuffer
umschließt; siehe GPUBufferBinding-Objekte für eine Definition)GPUExternalTexture
GPUSampler
GPUTextureView
label
Optional-
Ein String, der ein Etikett bereitstellt, das verwendet werden kann, um das Objekt, zum Beispiel in
GPUError
-Meldungen oder Konsolenwarnungen, zu identifizieren. layout
-
Das
GPUBindGroupLayout
, dem dieentries
dieser Bindungsgruppe entsprechen.
GPUBufferBinding-Objekte
Ein GPUBufferBinding
-Objekt kann die folgenden Eigenschaften enthalten:
buffer
-
Das
GPUBuffer
-Objekt, das Sie binden möchten. offset
Optional-
Der Offset in Bytes vom Beginn des
buffers
bis zum Beginn des Bereichs, der dem Shader durch die Pufferbindung freigelegt wird. Wenn ausgelassen, wirdoffset
standardmäßig auf 0 gesetzt. size
Optional-
Die Größe in Bytes der Pufferbindung. Wenn ausgelassen, wird
size
der Bereich aboffset
bis zum Ende desbuffers
sein. Wenn sowohloffset
als auchsize
weggelassen werden, wird der gesamte Puffer dem Shader ausgesetzt.
Rückgabewert
Eine Instanz des GPUBindGroup
-Objekts.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn createBindGroup()
aufgerufen wird, andernfalls wird ein GPUValidationError
erzeugt 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 korrekten Ressourcentyp. Zum Beispiel hat einbuffer
-Ressourcenlayoutobjekt einGPUBufferBinding
-Objekt, das in der entsprechenden Bindung angegeben ist. - Wenn das Ressourcenlayoutobjekt ein
buffer
ist:- Der entsprechend gebundene
GPUBuffer
:- Hat seinen gebundenen Teil (wie durch
offset
undsize
angegeben) komplett darin enthalten, mit einer nicht-null Größe. - Hat eine Größe, die größer ist als die
minBindingSize
desbuffer
-Ressourcenlayouts.
- Hat seinen gebundenen Teil (wie durch
- Wenn der Ressourcenlayoutobjekttyp
"uniform"
ist:- Hat der gebundene
GPUBuffer
eineusage
, dieGPUBufferUsage.UNIFORM
umfasst. - Ist die effektive Größe des gebundenen Puffersegments kleiner oder gleich der
maxUniformBufferBindingSize
Grenze desGPUDevice
. - Ist der angegebene
GPUBufferBinding
-offset
ein Vielfaches derminUniformBufferOffsetAlignment
Grenze desGPUDevice
.
- Hat der gebundene
- Wenn der Ressourcenlayoutobjekttyp
"storage"
oder"read-only-storage"
ist:- Hat der gebundene
GPUBuffer
eineusage
, dieGPUBufferUsage.STORAGE
umfasst. - Ist die effektive Größe des gebundenen Puffersegments kleiner oder gleich der
maxStorageBufferBindingSize
Grenze desGPUDevice
. - Ist die effektive Größe des gebundenen Puffersegments ein Vielfaches von 4.
- Ist der angegebene
GPUBufferBinding
-offset
ein Vielfaches derminStorageBufferOffsetAlignment
Grenze desGPUDevice
.
- Hat der gebundene
- Der entsprechend gebundene
- Wenn das Ressourcenlayoutobjekt ein
storageTexture
ist, hat die entsprechend gebundeneGPUTextureView
:- Eine
dimension
, die derviewDimension
des Ressourcenlayoutobjekts entspricht (sieheGPUTexture.createView()
für mehr Details zu den Einstellungen einer Texture-Ansicht). - Ein
format
, das densampleType
des Ressourcenlayoutobjekts entspricht. - Eine
mipLevelCount
gleich 1. - Eine Ansicht eines
GPUTexture
, derenusage
GPUTextureUsage.STORAGE_BINDING
umfasst.
- Eine
- Wenn das Ressourcenlayoutobjekt ein
texture
ist, hat die entsprechend gebundeneGPUTextureView
:- Eine
dimension
, die derviewDimension
des Ressourcenlayoutobjekts entspricht (sieheGPUTexture.createView()
für mehr Details zu den Einstellungen einer Texture-Ansicht). - Ein
format
, das mit demsampleType
des Ressourcenlayoutobjekts kompatibel ist. - Eine Ansicht eines
GPUTexture
, derenusage
GPUTextureUsage.TEXTURE_BINDING
umfasst. - Eine Ansicht eines
GPUTexture
mit einemsampleCount
, das größer als 1 ist, wenn diemultisampled
-Eigenschaft des Ressourcenlayoutobjektstrue
ist, oder gleich 1, wenn siefalse
ist.
- Eine
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 die 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