GPUDevice: createBindGroup() method
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 GPUBindGroupLayout
referenced in layout
. Each entry object has the following properties:
-
binding
-
A number representing a unique identifier for this resource binding, which matches the binding
value of a corresponding GPUBindGroupLayout
entry. In addition, it matches the n
index 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:
label
Optional
-
A string providing a label that can be used to identify the object, for example in GPUError
messages or console warnings.
-
layout
-
The GPUBindGroupLayout
that the entries
of this bind group will conform to.
GPUBufferBinding objects
A GPUBufferBinding
object can contain the following properties:
-
buffer
-
The GPUBuffer
object you want to bind.
offset
Optional
-
The offset, in bytes, from the beginning of the buffer
to the beginning of the range exposed to the shader by the buffer binding. If omitted, offset
defaults to 0.
size
Optional
-
The size, in bytes, of the buffer binding. If omitted, size
will be the range starting at offset
and ending at the end of the buffer
. If both offset
and size
are 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
layout
GPUBindGroupLayout
equals the number of entry objects in entries
.
- For each entry in the
layout
GPUBindGroupLayout
, the corresponding entry object in entries
binds the correct resource type. For example, a buffer
resource layout object has a GPUBufferBinding
object specified in the corresponding binding.
- If the resource layout object is a
buffer
:
- The corresponding bound
GPUBuffer
:
- Has its bound part (as specified by
offset
and size
) contained inside it completely, with a non-zero size.
- Has a size bigger than the
buffer
resource layout's minBindingSize
.
- If the resource layout object
type
is "uniform"
:
- The bound
GPUBuffer
has a usage
that includes GPUBufferUsage.UNIFORM
.
- The effective size of the bound buffer segment is less than or equal to the
GPUDevice
's maxUniformBufferBindingSize
limit.
- The specified
GPUBufferBinding
offset
is a multiple of the GPUDevice
's minUniformBufferOffsetAlignment
limit.
- If the resource layout object
type
is "storage"
or "read-only-storage"
:
- The bound
GPUBuffer
has a usage
that includes GPUBufferUsage.STORAGE
.
- The effective size of the bound buffer segment is less than or equal to the
GPUDevice
's maxStorageBufferBindingSize
limit.
- The effective size of the bound buffer segment is a multiple of 4.
- The specified
GPUBufferBinding
offset
is a multiple of the GPUDevice
's minStorageBufferOffsetAlignment
limit.
- If the resource layout object is a
storageTexture
, the corresponding bound GPUTextureView
:
- Has a
dimension
equal to the resource layout object's viewDimension
(see GPUTexture.createView()
for more details of a texture view's settings).
- Has a
format
equal to the resource layout object's sampleType
.
- Has a
mipLevelCount
equal to 1.
- Is a view of a
GPUTexture
with a usage
that includes GPUTextureUsage.STORAGE_BINDING
.
- If the resource layout object is a
texture
, the corresponding bound GPUTextureView
:
- Has a
dimension
equal to the resource layout object's viewDimension
(see GPUTexture.createView()
for more details of a texture view's settings).
- Has a
format
compatible with the resource layout object's sampleType
.
- Is a view of a
GPUTexture
with a usage
that includes GPUTextureUsage.TEXTURE_BINDING
.
- is a view of a
GPUTexture
with a sampleCount
greater than 1 if the resource layout object's multisampled
property is true
, or equal to 1 if it is false
.
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
Browser compatibility
|
Desktop |
Mobile |
|
Chrome |
Edge |
Firefox |
Internet Explorer |
Opera |
Safari |
WebView Android |
Chrome Android |
Firefox for Android |
Opera Android |
Safari on IOS |
Samsung Internet |
createBindGroup |
113Currently supported on ChromeOS, macOS, and Windows only.
|
113Currently supported on ChromeOS, macOS, and Windows only.
|
previewCurrently supported on Linux and Windows only.
|
No |
99Currently supported on ChromeOS, macOS, and Windows only.
|
No |
No |
No |
No |
No |
No |
No |
See also