GPURenderBundleEncoder: setBindGroup()-Methode
Eingeschränkt verfügbar
Diese Funktion ist nicht Baseline, da sie in einigen der am weitesten verbreiteten Browser nicht funktioniert.
Want more browser support for this feature? Tell us why.
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