GPURenderPassEncoder: setBindGroup() 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, 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 setBindGroup()
Methode der GPURenderPassEncoder
Schnittstelle setzt die zu verwendende GPUBindGroup
für nachfolgende Renderbefehle für einen bestimmten Index.
Syntax
setBindGroup(index, bindGroup)
setBindGroup(index, bindGroup, dynamicOffsets)
setBindGroup(index, bindGroup, dynamicOffsets, dynamicOffsetsStart,
dynamicOffsetsLength)
Parameter
index
-
Der Index, an dem die Bind-Gruppe gesetzt werden soll. Dies entspricht dem
n
Indexwert des entsprechenden@group(n)
Attributs im Shader-Code (GPUShaderModule
), das in der zugehörigen Pipeline verwendet wird. bindGroup
-
Die
GPUBindGroup
, die für nachfolgende Renderbefehle verwendet werden soll, odernull
, in welchem Fall jede zuvor gesetzte Bind-Gruppe im angegebenen Slot entfernt wird. dynamicOffsets
Optional-
Ein Wert, der den Offset in Bytes für jeden Eintrag in
bindGroup
angibt, bei demhasDynamicOffset: true
gesetzt ist (d.h. im Deskriptor des Aufrufs vonGPUDevice.createBindGroupLayout()
, der dasGPUBindGroupLayout
Objekt erstellt hat, auf dem diebindGroup
basiert). Dieser Wert kann sein:- Ein Array von Zahlen, das die verschiedenen Offsets angibt.
- Ein
Uint32Array
, das Zahlen enthält, die die Offsets angeben.
Wenn ein Uint32Array
Wert für dynamicOffsets
angegeben ist, sind beide der folgenden Parameter ebenfalls erforderlich:
dynamicOffsetsStart
-
Eine Zahl, die den Offset in Array-Elementen in
dynamicOffsetsData
angibt, wo die dynamischen Offset-Daten beginnen. dynamicOffsetsLength
-
Eine Zahl, die angibt, wie viele dynamische Offset-Werte aus
dynamicOffsetsData
gelesen werden sollen.
Rückgabewert
Keiner (Undefined
).
Ausnahmen
Für setBindGroup()
-Aufrufe, die einen Uint32Array
Wert für dynamicOffsets
verwenden, wird der Aufruf mit einem RangeError
DOMException
abgelehnt, wenn:
dynamicOffsetsStart
kleiner als 0 ist.dynamicOffsetsStart
+dynamicOffsetsLength
größer alsdynamicOffsets.length
ist.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn setBindGroup()
aufgerufen wird, andernfalls wird ein GPUValidationError
generiert und der GPURenderPassEncoder
wird ungültig:
index
ist kleiner oder gleich demmaxBindGroups
Limit desGPUDevice
.dynamicOffsets.length
entspricht der Anzahl der Einträge inbindGroup
, bei denenhasDynamicOffset: true
gesetzt ist.- Für
bindGroup
-Einträge, bei denen der gebundenebuffer
-Typ"uniform"
ist (sieheGPUDevice.createBindGroupLayout()
), ist jede Zahl indynamicOffsets
ein Vielfaches desminUniformBufferOffsetAlignment
Limits desGPUDevice
. - Für
bindGroup
-Einträge, bei denen der gebundenebuffer
-Typ"storage"
oder"read-only-storage"
ist (sieheGPUDevice.createBindGroupLayout()
), ist jede Zahl indynamicOffsets
ein Vielfaches desminStorageBufferOffsetAlignment
Limits desGPUDevice
. - Für jeden
bindGroup
-Eintrag gilt, dass der gebundenebuffer
-Offset, plus derminBindingSize
des entsprechenden Layout-Eintrags, plus der entsprechende dynamische Offset, der indynamicOffsets
angegeben ist, kleiner oder gleich dersize
des gebundenenbuffer
ist.
Beispiele
Bind-Gruppe setzen
Im WebGPU-Beispiel Textured Cube wird setBindGroup()
verwendet, um die uniformBindGroup
an der Index-Position 0 zu binden. Sehen Sie sich das Beispiel für den vollständigen Kontext an.
// ...
const commandEncoder = device.createCommandEncoder();
const passEncoder = commandEncoder.beginRenderPass(renderPassDescriptor);
passEncoder.setPipeline(pipeline);
passEncoder.setBindGroup(0, uniformBindGroup);
passEncoder.setVertexBuffer(0, verticesBuffer);
passEncoder.draw(cubeVertexCount, 1, 0, 0);
passEncoder.end();
device.queue.submit([commandEncoder.finish()]);
// ...
Hinweis: Studieren Sie die anderen WebGPU-Beispiele für weitere Beispiele zur Verwendung von setBindGroup()
.
Bind-Gruppe entfernen
// Set bind group in slot 0
passEncoder.setBindGroup(0, uniformBindGroup);
// Later, unset bind group in slot 0
passEncoder.setBindGroup(0, null);
Spezifikationen
Specification |
---|
WebGPU # programmable-passes-bind-groups |
Browser-Kompatibilität
BCD tables only load in the browser
Siehe auch
- Die WebGPU API