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