This feature is not Baseline because it does not work in some of the most widely-used browsers.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
Note: This feature is available in Web Workers.
The setBindGroup() method of the GPURenderBundleEncoder interface sets the GPUBindGroup to use for subsequent render bundle commands, for a given index.
Note: This method is functionally identical to its equivalent on GPURenderPassEncoder — setBindGroup().
setBindGroup(index, bindGroup)
setBindGroup(index, bindGroup, dynamicOffsets)
setBindGroup(index, bindGroup, dynamicOffsets, dynamicOffsetsStart,
dynamicOffsetsLength)
indexThe index to set the bind group at. This matches the n index value of the corresponding @group(n) attribute in the shader code (GPUShaderModule) used in the related pipeline.
bindGroupThe GPUBindGroup to use for subsequent render bundle commands, or null, in which case any previously-set bind group in the given slot is unset.
dynamicOffsets OptionalA value specifying the offset, in bytes, for each entry in bindGroup with hasDynamicOffset: true set (i.e., in the descriptor of the GPUDevice.createBindGroupLayout() call that created the GPUBindGroupLayout object that the bindGroup is based on). This value can be:
Uint32Array containing numbers specifying the offsets.If a Uint32Array value is specified for dynamicOffsets, both of the following parameters are also required:
dynamicOffsetsStartA number specifying the offset, in array elements, into dynamicOffsetsData, where the dynamic offset data begins.
dynamicOffsetsLengthA number specifying the number of dynamic offset values to be read from in dynamicOffsetsData.
None (Undefined).
For setBindGroup() calls that use a Uint32Array value for dynamicOffsets, the call will throw with a RangeError DOMException if:
dynamicOffsetsStart is less than 0.dynamicOffsetsStart + dynamicOffsetsLength is greater than dynamicOffsets.length.The following criteria must be met when calling setBindGroup(), otherwise a GPUValidationError is generated and the GPURenderBundleEncoder becomes invalid:
index is less than or equal to the GPUDevice's maxBindGroups limit.dynamicOffsets.length is the same as the number of entries in bindGroup with hasDynamicOffset: true set.bindGroup entries where the bound buffer's type is "uniform" (see GPUDevice.createBindGroupLayout()), each number in dynamicOffsets is a multiple of the GPUDevice's minUniformBufferOffsetAlignment limit.bindGroup entries where the bound buffer's type is "storage" or "read-only-storage" (see GPUDevice.createBindGroupLayout()), each number in dynamicOffsets is a multiple of the GPUDevice's minStorageBufferOffsetAlignment limit.bindGroup entry, the bound buffer's offset, plus the corresponding layout entry's minBindingSize, plus the corresponding dynamic offset specified in dynamicOffsets, is less than or equal to the bound buffer's size.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);
}
}
The above snippet is taken from the WebGPU Samples Animometer example.
// Set bind group in slot 0 passEncoder.setBindGroup(0, timeBindGroup); // Later, unset bind group in slot 0 passEncoder.setBindGroup(0, null);
| Specification |
|---|
| WebGPU> # programmable-passes-bind-groups> |
| Desktop | Mobile | |||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Chrome | Edge | Firefox | Opera | Safari | Chrome Android | Firefox for Android | Opera Android | Safari on IOS | Samsung Internet | WebView Android | WebView on iOS | |
setBindGroup |
113Currently supported on ChromeOS, macOS, and Windows only. |
113Currently supported on ChromeOS, macOS, and Windows only. |
141Currently supported on Windows only, in all contexts except for service workers. |
99Currently supported on ChromeOS, macOS, and Windows only. |
26 | 121 | No | 81 | 26 | 25.0 | 121 | 26 |
unset_bind_group |
117Currently supported on ChromeOS, macOS, and Windows only. |
117Currently supported on ChromeOS, macOS, and Windows only. |
No | 103Currently supported on ChromeOS, macOS, and Windows only. |
No | 121 | No | 81 | No | 25.0 | 121 | No |
© 2005–2025 MDN contributors.
Licensed under the Creative Commons Attribution-ShareAlike License v2.5 or later.
https://developer.mozilla.org/en-US/docs/Web/API/GPURenderBundleEncoder/setBindGroup