GPURenderBundleEncoder: Methode setBindGroup()
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 Methode setBindGroup() der Schnittstelle GPURenderBundleEncoder legt für einen bestimmten Index die GPUBindGroup fest, die für nachfolgende Render-Bundle-Befehle verwendet wird.
Hinweis:
Diese Methode ist funktional identisch mit der entsprechenden Methode von 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 festgelegt wird. Er entspricht dem Indexwert
ndes zugehörigen Attributs@group(n)im Shader-Code (GPUShaderModule), der in der betreffenden Pipeline verwendet wird. bindGroup-
Die
GPUBindGroup, die für nachfolgende Render-Bundle-Befehle verwendet wird, odernull. Beinullwird eine zuvor im angegebenen Slot festgelegte Bind Group entfernt. dynamicOffsetsOptional-
Ein Wert, der für jeden Eintrag in
bindGroup, bei demhasDynamicOffset: truefestgelegt ist, den Offset in Byte angibt (also im Deskriptor des Aufrufs vonGPUDevice.createBindGroupLayout(), mit dem dasGPUBindGroupLayout-Objekt erstellt wurde, auf dembindGroupbasiert). Dieser Wert kann Folgendes sein:- Ein Array von Zahlen, die die verschiedenen Offsets angeben.
- Ein
Uint32Arraymit Zahlen, die die Offsets angeben.
Wenn für dynamicOffsets ein Uint32Array angegeben wird, sind zusätzlich beide folgenden Parameter erforderlich:
dynamicOffsetsStart-
Eine Zahl, die den Offset in Array-Elementen innerhalb von
dynamicOffsetsDataangibt, an dem die Daten für die dynamischen Offsets beginnen. dynamicOffsetsLength-
Eine Zahl, die angibt, wie viele Werte für dynamische Offsets aus
dynamicOffsetsDatagelesen werden sollen.
Rückgabewert
Keiner (undefined).
Ausnahmen
Bei Aufrufen von setBindGroup(), die für dynamicOffsets ein Uint32Array verwenden, wird ein RangeError ausgelöst, wenn:
dynamicOffsetsStartkleiner als 0 ist.dynamicOffsetsStart+dynamicOffsetsLengthgrößer alsdynamicOffsets.lengthist.
Validierung
Beim Aufruf von setBindGroup() müssen die folgenden Kriterien erfüllt sein. Andernfalls wird ein GPUValidationError erzeugt und der GPURenderBundleEncoder wird ungültig:
indexist kleiner oder gleich dem LimitmaxBindGroupsdesGPUDevice.dynamicOffsets.lengthentspricht der Anzahl der Einträge inbindGroup, bei denenhasDynamicOffset: truefestgelegt ist.- Bei
bindGroup-Einträgen, deren gebundenerbufferdentype"uniform"hat (sieheGPUDevice.createBindGroupLayout()), ist jede Zahl indynamicOffsetsein Vielfaches des LimitsminUniformBufferOffsetAlignmentdesGPUDevice. - Bei
bindGroup-Einträgen, deren gebundenerbufferdentype"storage"oder"read-only-storage"hat (sieheGPUDevice.createBindGroupLayout()), ist jede Zahl indynamicOffsetsein Vielfaches des LimitsminStorageBufferOffsetAlignmentdesGPUDevice. - Für jeden
bindGroup-Eintrag ist die Summe aus demoffsetdes gebundenenbuffer, demminBindingSizedes entsprechenden Layout-Eintrags und dem zugehörigen, indynamicOffsetsangegebenen dynamischen Offset kleiner oder gleich dersizedes gebundenenbuffer.
Beispiele
>Bind Group festlegen
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 Animometer-Beispiel der WebGPU Samples.
Bind Group entfernen
// 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