GPURenderBundleEncoder: setBindGroup() 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 setBindGroup()-Methode der GPURenderBundleEncoder-Schnittstelle setzt die GPUBindGroup zur Verwendung für nachfolgende Befehle des Render-Bundles, für einen gegebenen Index.
Hinweis:
Diese Methode ist funktional identisch mit ihrem Äquivalent auf GPURenderPassEncoder — setBindGroup().
Syntax
setBindGroup(index, bindGroup)
setBindGroup(index, bindGroup, dynamicOffsets)
setBindGroup(index, bindGroup, dynamicOffsets, dynamicOffsetsStart,
dynamicOffsetsLength)
Parameter
index-
Der Index, an dem die Bind-Gruppe gesetzt wird. Dies entspricht dem
n-Indexwert des entsprechenden@group(n)Attributs im Shader-Code (GPUShaderModule), der in der zugehörigen Pipeline verwendet wird. bindGroup-
Die
GPUBindGroup, die für nachfolgende Befehle des Render-Bundles verwendet wird, odernull, wobei jede zuvor gesetzte Bind-Gruppe im gegebenen Slot aufgehoben wird. dynamicOffsetsOptional-
Ein Wert, der die Verschiebung in Bytes für jeden Eintrag in
bindGroupmithasDynamicOffset: truefestlegt (d.h. im Deskriptor desGPUDevice.createBindGroupLayout()-Aufrufs, der dasGPUBindGroupLayout-Objekt erzeugt hat, auf dem diebindGroupbasiert). Dieser Wert kann sein:- Ein Array von Zahlen, die die verschiedenen Verschiebungen angeben.
- Ein
Uint32Arraymit Zahlen, die die Verschiebungen angeben.
Wenn ein Uint32Array-Wert für dynamicOffsets angegeben wird, sind beide der folgenden Parameter ebenfalls erforderlich:
dynamicOffsetsStart-
Eine Zahl, die den Versatz in Array-Elementen in
dynamicOffsetsDataangibt, ab dem die dynamischen Versatzdaten beginnen. dynamicOffsetsLength-
Eine Zahl, die die Anzahl der dynamischen Versatzwerte angibt, die aus
dynamicOffsetsDatagelesen werden sollen.
Rückgabewert
Keiner (Undefined).
Ausnahmen
Für setBindGroup()-Aufrufe, die einen Uint32Array-Wert für dynamicOffsets verwenden, wirft der Aufruf einen RangeError DOMException, wenn:
dynamicOffsetsStartkleiner als 0 ist.dynamicOffsetsStart+dynamicOffsetsLengthgrößer alsdynamicOffsets.lengthist.
Validierung
Die folgenden Kriterien müssen erfüllt sein, wenn setBindGroup() aufgerufen wird, andernfalls wird ein GPUValidationError erzeugt und der GPURenderBundleEncoder wird ungültig:
indexist kleiner oder gleich demmaxBindGroups- Limit desGPUDevice.dynamicOffsets.lengthist gleich der Anzahl der Einträge inbindGroup, bei denenhasDynamicOffset: truegesetzt ist.- Für
bindGroup-Einträge, bei denen der gebundenebuffer-type"uniform"ist (sieheGPUDevice.createBindGroupLayout()), ist jede Zahl indynamicOffsetsein Vielfaches desminUniformBufferOffsetAlignment- Limits desGPUDevice. - Für
bindGroup-Einträge, bei denen der gebundenebuffer-type"storage"oder"read-only-storage"ist (sieheGPUDevice.createBindGroupLayout()), ist jede Zahl indynamicOffsetsein Vielfaches desminStorageBufferOffsetAlignment- Limits desGPUDevice. - Für jeden
bindGroup-Eintrag ist der gebundenebuffer-offsetplus die entsprechende Layout-Eintrags-minBindingSizeplus der entsprechende indynamicOffsetsangegebene dynamische Offset kleiner oder gleich dersizedes gebundenenbuffers.
Beispiele
>Bind-Gruppe setzen
function recordRenderPass(passEncoder) {
if (settings.dynamicOffsets) {
passEncoder.setPipeline(dynamicPipeline);
} else {
passEncoder.setPipeline(pipeline);
}
passEncoder.setVertexBuffer(0, vertexBuffer);
passEncoder.setBindGroup(0, timeBindGroup);
const dynamicOffsets = [0];
for (let i = 0; i < numTriangles; ++i) {
if (settings.dynamicOffsets) {
dynamicOffsets[0] = i * alignedUniformBytes;
passEncoder.setBindGroup(1, dynamicBindGroup, dynamicOffsets);
} else {
passEncoder.setBindGroup(1, bindGroups[i]);
}
passEncoder.draw(3, 1, 0, 0);
}
}
Der obige Code-Schnipsel stammt aus dem WebGPU Samples Animometer Beispiel.
Bind-Gruppe aufheben
// Set bind group in slot 0
passEncoder.setBindGroup(0, timeBindGroup);
// Later, unset bind group in slot 0
passEncoder.setBindGroup(0, null);
Spezifikationen
| Specification |
|---|
| WebGPU> # programmable-passes-bind-groups> |
Browser-Kompatibilität
Loading…
Siehe auch
- Die WebGPU-API