GPURenderBundleEncoder: setBindGroup()-Methode
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
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, die für nachfolgende Render-Bundle-Befehle für einen gegebenen Index verwendet werden soll.
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-Group gesetzt werden soll. 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 Render-Bundle-Befehle verwendet werden soll, odernull, wobei jede zuvor gesetzte Bind-Group im angegebenen Slot aufgehoben wird. dynamicOffsetsOptional-
Ein Wert, der den Offset in Bytes für jeden Eintrag in
bindGroupangibt, mithasDynamicOffset: truegesetzt (d.h. im Deskriptor des AufrufsGPUDevice.createBindGroupLayout(), der dasGPUBindGroupLayout-Objekt erstellt hat, auf dem diebindGroupbasiert). Dieser Wert kann sein:- Ein Array von Zahlen, die die verschiedenen Offsets angeben.
- Ein
Uint32Array, das Zahlen enthält, die die Offsets spezifizieren.
Wenn ein Uint32Array-Wert für dynamicOffsets angegeben ist, sind die folgenden zwei Parameter ebenfalls erforderlich:
dynamicOffsetsStart-
Eine Zahl, die den Offset in Array-Elementen in
dynamicOffsetsDataangibt, wo die dynamischen Offset-Daten beginnen. dynamicOffsetsLength-
Eine Zahl, die die Anzahl der dynamischen Offset-Werte angibt, die aus
dynamicOffsetsDatagelesen werden sollen.
Rückgabewert
Keiner (undefined).
Ausnahmen
Für setBindGroup()-Aufrufe, die einen Uint32Array-Wert für dynamicOffsets verwenden, wird ein RangeError DOMException ausgelöst, 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 demmaxBindGroupsLimit desGPUDevice.dynamicOffsets.lengthentspricht 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 derminUniformBufferOffsetAlignmentGrenze desGPUDevice. - Für
bindGroup-Einträge, bei denen der gebundenebuffer-type"storage"oder"read-only-storage"ist (sieheGPUDevice.createBindGroupLayout()), ist jede Zahl indynamicOffsetsein Vielfaches derminStorageBufferOffsetAlignmentGrenze desGPUDevice. - Für jeden
bindGroup-Eintrag ist der gebundenebuffer-offset, plus die entsprechende Layout-Eintrags-minBindingSize, plus der entsprechende dynamische Offset, der indynamicOffsetsangegeben ist, kleiner oder gleich dersizedes gebundenenbuffer.
Beispiele
>Bind-Group 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 Ausschnitt stammt aus dem WebGPU-Beispiel Animometer example.
Bind-Group aufheben
// Set bind group in slot 0
passEncoder.setBindGroup(0, timeBindGroup);
// Later, unset bind group in slot 0
passEncoder.setBindGroup(0, null);
Spezifikationen
| Spezifikation |
|---|
| WebGPU> # programmable-passes-bind-groups> |
Browser-Kompatibilität
Siehe auch
- Die WebGPU API