GPUDevice: createBindGroup() method
Experimental: This is an experimental technology
Check the Browser compatibility table carefully before using this in production.
Secure context: This feature is available only in secure contexts (HTTPS), in some or all supporting browsers.
The createBindGroup() method of the
GPUDevice interface creates a GPUBindGroup based on a GPUBindGroupLayout that defines a set of resources to be bound together in a group and how those resources are used in shader stages.
Syntax
createBindGroup(descriptor)
Parameters
descriptor-
An object containing the following properties:
entries-
An array of entry objects describing the resources to expose to the shader. There will be one for each corresponding entry described by the
GPUBindGroupLayoutreferenced inlayout. Each entry object has the following properties:binding-
A number representing a unique identifier for this resource binding, which matches the
bindingvalue of a correspondingGPUBindGroupLayoutentry. In addition, it matches thenindex value of the corresponding@binding(n)attribute in the shader (GPUShaderModule) used in the related pipeline. resource-
The resource to bind. This can be one of the following:
GPUBufferBinding(which wraps aGPUBuffer; see GPUBufferBinding objects for a definition)GPUExternalTextureGPUSamplerGPUTextureView
labelOptional-
A string providing a label that can be used to identify the object, for example in
GPUErrormessages or console warnings. layout-
The
GPUBindGroupLayoutthat theentriesof this bind group will conform to.
GPUBufferBinding objects
A GPUBufferBinding object can contain the following properties:
buffer-
The
GPUBufferobject you want to bind. offsetOptional-
The offset, in bytes, from the beginning of the
bufferto the beginning of the range exposed to the shader by the buffer binding. If omitted,offsetdefaults to 0. sizeOptional-
The size, in bytes, of the buffer binding. If omitted,
sizewill be the range starting atoffsetand ending at the end of thebuffer. If bothoffsetandsizeare omitted, the entire buffer is exposed to the shader.
Return value
A GPUBindGroup object instance.
Validation
The following criteria must be met when calling createBindGroup(), otherwise a GPUValidationError is generated and an invalid GPUBindGroup object is returned:
- The number of entries in the
layoutGPUBindGroupLayoutequals the number of entry objects inentries. - For each entry in the
layoutGPUBindGroupLayout, the corresponding entry object inentriesbinds the correct resource type. For example, abufferresource layout object has aGPUBufferBindingobject specified in the corresponding binding. - If the resource layout object is a
buffer:- The corresponding bound
GPUBuffer:- Has its bound part (as specified by
offsetandsize) contained inside it completely, with a non-zero size. - Has a size bigger than the
bufferresource layout'sminBindingSize.
- Has its bound part (as specified by
- If the resource layout object
typeis"uniform":- The bound
GPUBufferhas ausagethat includesGPUBufferUsage.UNIFORM. - The effective size of the bound buffer segment is less than or equal to the
GPUDevice'smaxUniformBufferBindingSizelimit. - The specified
GPUBufferBindingoffsetis a multiple of theGPUDevice'sminUniformBufferOffsetAlignmentlimit.
- The bound
- If the resource layout object
typeis"storage"or"read-only-storage":- The bound
GPUBufferhas ausagethat includesGPUBufferUsage.STORAGE. - The effective size of the bound buffer segment is less than or equal to the
GPUDevice'smaxStorageBufferBindingSizelimit. - The effective size of the bound buffer segment is a multiple of 4.
- The specified
GPUBufferBindingoffsetis a multiple of theGPUDevice'sminStorageBufferOffsetAlignmentlimit.
- The bound
- The corresponding bound
- If the resource layout object is a
storageTexture, the corresponding boundGPUTextureView:- Has a
dimensionequal to the resource layout object'sviewDimension(seeGPUTexture.createView()for more details of a texture view's settings). - Has a
formatequal to the resource layout object'ssampleType. - Has a
mipLevelCountequal to 1. - Is a view of a
GPUTexturewith ausagethat includesGPUTextureUsage.STORAGE_BINDING.
- Has a
- If the resource layout object is a
texture, the corresponding boundGPUTextureView:- Has a
dimensionequal to the resource layout object'sviewDimension(seeGPUTexture.createView()for more details of a texture view's settings). - Has a
formatcompatible with the resource layout object'ssampleType. - Is a view of a
GPUTexturewith ausagethat includesGPUTextureUsage.TEXTURE_BINDING. - is a view of a
GPUTexturewith asampleCountgreater than 1 if the resource layout object'smultisampledproperty istrue, or equal to 1 if it isfalse.
- Has a
Examples
Note: The WebGPU samples feature many more examples.
Basic example
Our basic compute demo shows an example of creating a bind group layout and then using that as a template when creating a bind group.
// ...
const bindGroupLayout = device.createBindGroupLayout({
entries: [
{
binding: 0,
visibility: GPUShaderStage.COMPUTE,
buffer: {
type: "storage",
},
},
],
});
const bindGroup = device.createBindGroup({
layout: bindGroupLayout,
entries: [
{
binding: 0,
resource: {
buffer: output,
},
},
],
});
// ...
Specifications
| Specification |
|---|
| WebGPU # dom-gpudevice-createbindgroup |
Browser compatibility
BCD tables only load in the browser
See also
- The WebGPU API