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 vor der Verwendung auf produktiven Webseiten.

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 GPURenderPassEncoder Schnittstelle setzt die zu verwendende GPUBindGroup für nachfolgende Renderbefehle für einen bestimmten Index.

Syntax

js
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, oder null, 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 dem hasDynamicOffset: true gesetzt ist (d.h. im Deskriptor des Aufrufs von GPUDevice.createBindGroupLayout(), der das GPUBindGroupLayout Objekt erstellt hat, auf dem die bindGroup 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 als dynamicOffsets.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 dem maxBindGroups Limit des GPUDevice.
  • dynamicOffsets.length entspricht der Anzahl der Einträge in bindGroup, bei denen hasDynamicOffset: true gesetzt ist.
  • Für bindGroup-Einträge, bei denen der gebundene buffer-Typ "uniform" ist (siehe GPUDevice.createBindGroupLayout()), ist jede Zahl in dynamicOffsets ein Vielfaches des minUniformBufferOffsetAlignment Limits des GPUDevice.
  • Für bindGroup-Einträge, bei denen der gebundene buffer-Typ "storage" oder "read-only-storage" ist (siehe GPUDevice.createBindGroupLayout()), ist jede Zahl in dynamicOffsets ein Vielfaches des minStorageBufferOffsetAlignment Limits des GPUDevice.
  • Für jeden bindGroup-Eintrag gilt, dass der gebundene buffer-Offset, plus der minBindingSize des entsprechenden Layout-Eintrags, plus der entsprechende dynamische Offset, der in dynamicOffsets angegeben ist, kleiner oder gleich der size des gebundenen buffer 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.

js
// ...

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

js
// 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

Report problems with this compatibility data on GitHub
desktopmobileserver
Chrome
Edge
Firefox
Opera
Safari
Chrome Android
Firefox for Android
Opera Android
Safari on iOS
Samsung Internet
WebView Android
WebView on iOS
Deno
setBindGroup
Experimental
Pass null to unset bind group
Experimental

Legend

Tip: you can click/tap on a cell for more information.

Full support
Full support
Partial support
Partial support
In development. Supported in a pre-release version.
In development. Supported in a pre-release version.
No support
No support
Experimental. Expect behavior to change in the future.
See implementation notes.
User must explicitly enable this feature.
Has more compatibility info.

Siehe auch