web api instance method
GPURenderPassEncoder: setBindGroup() method
Secure contextAvailable in workers
The setBindGroup() method of the
GPURenderPassEncoder interface sets the GPUBindGroup to use for subsequent render commands, for a given index.
Syntax
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
nindex value of the corresponding@group(n)attribute in the shader code (GPUShaderModule) used in the related pipeline.
- : The index to set the bind group at. This matches the
bindGroup- : The
GPUBindGroupto use for subsequent render commands, ornull, in which case any previously-set bind group in the given slot is unset.
- : The
dynamicOffsetsOptional- : A value specifying the offset, in bytes, for each entry in
bindGroupwithhasDynamicOffset: trueset (i.e., in the descriptor of thecreateBindGroupLayout()call that created theGPUBindGroupLayoutobject that thebindGroupis based on). This value can be:- An array of numbers specifying the different offsets.
- A
Uint32Arraycontaining numbers specifying the offsets.
- : A value specifying the offset, in bytes, for each entry in
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.
- : A number specifying the offset, in array elements, into
dynamicOffsetsLength- : A number specifying the number of dynamic offset values to be read from in
dynamicOffsetsData.
- : A number specifying the number of dynamic offset values to be read from in
Return value
None (undefined).
Exceptions
For setBindGroup() calls that use a Uint32Array value for dynamicOffsets, the call will throw with a RangeError DOMException if:
dynamicOffsetsStartis less than 0.dynamicOffsetsStart+dynamicOffsetsLengthis greater thandynamicOffsets.length.
Validation
The following criteria must be met when calling setBindGroup(), otherwise a GPUValidationError is generated and the GPURenderPassEncoder becomes invalid:
indexis less than or equal to theGPUDevice’smaxBindGroupslimit.dynamicOffsets.lengthis the same as the number of entries inbindGroupwithhasDynamicOffset: trueset.- For
bindGroupentries where the boundbuffer’stypeis"uniform"(seecreateBindGroupLayout()), each number indynamicOffsetsis a multiple of theGPUDevice’sminUniformBufferOffsetAlignmentlimit. - For
bindGroupentries where the boundbuffer’stypeis"storage"or"read-only-storage"(seecreateBindGroupLayout()), each number indynamicOffsetsis a multiple of theGPUDevice’sminStorageBufferOffsetAlignmentlimit. - For each
bindGroupentry, the boundbuffer’soffset, plus the corresponding layout entry’sminBindingSize, plus the corresponding dynamic offset specified indynamicOffsets, is less than or equal to the boundbuffer’ssize.
Examples
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.
// …
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
// Set bind group in slot 0
passEncoder.setBindGroup(0, uniformBindGroup);
// Later, unset bind group in slot 0
passEncoder.setBindGroup(0, null);
Specifications
Browser compatibility
See also
- The WebGPU API