GPURenderBundleEncoder: setBindGroup() method
Limited availability
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().
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. bindGroup-
The
GPUBindGroupto use for subsequent render bundle commands, ornull, in which case any previously-set bind group in the given slot is unset. dynamicOffsetsOptional-
A value specifying the offset, in bytes, for each entry in
bindGroupwithhasDynamicOffset: trueset (i.e., in the descriptor of theGPUDevice.createBindGroupLayout()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.
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:
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 GPURenderBundleEncoder 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"(seeGPUDevice.createBindGroupLayout()), each number indynamicOffsetsis a multiple of theGPUDevice'sminUniformBufferOffsetAlignmentlimit. - For
bindGroupentries where the boundbuffer'stypeis"storage"or"read-only-storage"(seeGPUDevice.createBindGroupLayout()), 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
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.
Unset bind group
// Set bind group in slot 0
passEncoder.setBindGroup(0, timeBindGroup);
// Later, unset bind group in slot 0
passEncoder.setBindGroup(0, null);
Specifications
| Specification |
|---|
| WebGPU> # programmable-passes-bind-groups> |
Browser compatibility
Loading…
See also
- The WebGPU API