GPUDevice: createBindGroup() 方法
createBindGroup()
方法是 GPUDevice
接口的一部分,用于根据 GPUBindGroupLayout
创建一个 GPUBindGroup
。GPUBindGroupLayout
定义了一组要绑定在一起的资源以及这些资源如何在着色器阶段中使用。
语法
js
createBindGroup(descriptor)
参数
descriptor
-
一个包含以下属性的对象
entries
-
一个描述要公开给着色器的资源的条目对象的数组。对于
layout
中引用的GPUBindGroupLayout
中描述的每个对应条目,都会有一个条目对象。每个条目对象都具有以下属性binding
-
一个表示此资源绑定的唯一标识符的数字,与
GPUBindGroupLayout
对应条目的binding
值匹配。此外,它还与着色器(GPUShaderModule
)中对应@binding(n)
属性的n
索引值匹配,该着色器用于相关管道。 resource
-
要绑定的资源。可以是以下之一
GPUBufferBinding
(包装GPUBuffer
;有关定义,请参阅 GPUBufferBinding 对象)GPUExternalTexture
GPUSampler
GPUTextureView
label
可选-
一个字符串,提供一个标签,可用于标识对象,例如在
GPUError
消息或控制台警告中。 layout
-
此绑定组的
entries
将符合的GPUBindGroupLayout
。
GPUBufferBinding 对象
返回值
一个 GPUBindGroup
对象实例。
验证
调用 createBindGroup()
时必须满足以下条件,否则将生成 GPUValidationError
并返回一个无效的 GPUBindGroup
对象
layout
GPUBindGroupLayout
中的条目数等于entries
中的条目对象数。- 对于
layout
GPUBindGroupLayout
中的每个条目,entries
中对应的条目对象都会绑定正确的资源类型。例如,buffer
资源布局对象在对应的绑定中指定了一个GPUBufferBinding
对象。 - 如果资源布局对象是
buffer
- 对应的绑定
GPUBuffer
- 其绑定部分(由
offset
和size
指定)完全包含在其中,大小不为零。 - 其大小大于
buffer
资源布局的minBindingSize
。
- 其绑定部分(由
- 如果资源布局对象的
type
是"uniform"
- 如果资源布局对象的
type
是"storage"
或"read-only-storage"
- 对应的绑定
- 如果资源布局对象是
storageTexture
,则对应的绑定GPUTextureView
- 其
dimension
等于资源布局对象的viewDimension
(有关纹理视图设置的更多详细信息,请参阅GPUTexture.createView()
)。 - 其
format
等于资源布局对象的sampleType
。 - 其
mipLevelCount
等于 1。 - 是
GPUTexture
的视图,其usage
包含GPUTextureUsage.STORAGE_BINDING
。
- 其
- 如果资源布局对象是
texture
,则对应的绑定GPUTextureView
- 其
dimension
等于资源布局对象的viewDimension
(有关纹理视图设置的更多详细信息,请参阅GPUTexture.createView()
)。 - 其
format
与资源布局对象的sampleType
兼容。 - 是
GPUTexture
的视图,其usage
包含GPUTextureUsage.TEXTURE_BINDING
。 - 是
GPUTexture
的视图,如果资源布局对象的multisampled
属性为true
,则其sampleCount
大于 1,如果为false
,则等于 1。
- 其
示例
注意:WebGPU 示例 提供了更多示例。
基本示例
我们的 基本计算演示 展示了创建绑定组布局,然后将其用作创建绑定组时的模板的示例。
js
// ...
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,
},
},
],
});
// ...
规范
规范 |
---|
WebGPU # dom-gpudevice-createbindgroup |
浏览器兼容性
BCD 表格仅在启用 JavaScript 的浏览器中加载。