GPURenderPassEncoder: setBindGroup() method

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 GPURenderPassEncoder interface sets the GPUBindGroup to use for subsequent render commands, for a given index.

Syntax

js
setBindGroup(index, bindGroup)
setBindGroup(index, bindGroup, dynamicOffsets)
setBindGroup(index, bindGroup, dynamicOffsets, dynamicOffsetsStart,
             dynamicOffsetsLength)

Parameters

index

The 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.

bindGroup

The GPUBindGroup to use for subsequent render commands, or null, in which case any previously-set bind group in the given slot is unset.

dynamicOffsets Optional

A 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:

If a Uint32Array value is specified for dynamicOffsets, both of the following parameters are also required:

dynamicOffsetsStart

A number specifying the offset, in array elements, into dynamicOffsetsData, where the dynamic offset data begins.

dynamicOffsetsLength

A number specifying the number of dynamic offset values to be read from in dynamicOffsetsData.

Return value

None (undefined).

Exceptions

For setBindGroup() calls that use a Uint32Array value for dynamicOffsets, the call will throw with a RangeError DOMException if:

Validation

The following criteria must be met when calling setBindGroup(), otherwise a GPUValidationError is generated and the GPURenderPassEncoder becomes invalid:

Examples

undefined

Set bind group

In the WebGPU Samples Textured Cube example, setBindGroup() is used to bind the uniformBindGroup to index position 0. Check out the example for the full context.

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()]);

// …

Note: Study the other WebGPU Samples for more examples of setBindGroup() usage.

Unset bind group

js
// Set bind group in slot 0
passEncoder.setBindGroup(0, uniformBindGroup);

// Later, unset bind group in slot 0
passEncoder.setBindGroup(0, null);

Specifications

See also