GPUDevice: createBindGroup() 方法
注意:此功能在 Web Workers 中可用。
GPUDevice 接口的 createBindGroup() 方法基于 GPUBindGroupLayout 创建一个 GPUBindGroup。该布局定义了一组要组合在一起的资源,以及这些资源如何在着色器阶段中使用。
语法
js
createBindGroup(descriptor)
参数
描述符(descriptor)-
包含以下属性的对象:
entries-
一个描述要暴露给着色器的资源的条目对象数组。数组中的每个对象都对应于
layout中引用的GPUBindGroupLayout所描述的相应条目。每个条目对象具有以下属性:binding-
一个数字,表示此资源绑定的唯一标识符,它匹配
GPUBindGroupLayout中相应条目的binding值。此外,它还匹配相关管道中使用的着色器(GPUShaderModule)中@binding(n)属性的n索引值。 resource-
要绑定的资源。可以是以下之一:
GPUBufferBinding:封装了一个GPUBuffer;有关定义,请参阅 GPUBufferBinding 对象。GPUBuffer:如果使用了默认的offset和size值,则可以直接使用,而不是封装在GPUBufferBinding中。GPUExternalTextureGPUTextureView:可以代替GPUExternalTexture使用,前提是它们兼容(即,为 2D 格式且具有单个子资源,例如dimension: "2d")。GPUTexture:可以代替GPUTextureView使用,前提是想要一个默认视图。在此上下文中,GPUTexture等同于使用不带参数的GPUTexture.createView()调用创建的GPUTextureView对象。GPUSampler
label可选-
一个字符串,提供可用于识别对象的标签,例如在
GPUError消息或控制台警告中。 layout-
entries(此绑定组的条目)将符合的GPUBindGroupLayout。
GPUBufferBinding 对象
GPUBufferBinding 对象可以包含以下属性:
返回值
一个 GPUBindGroup 对象实例。
验证
调用 createBindGroup() 时必须满足以下条件,否则会生成 GPUValidationError,并返回一个无效的 GPUBindGroup 对象:
layoutGPUBindGroupLayout中的条目数量等于entries中条目对象的数量。- 对于
layoutGPUBindGroupLayout中的每个条目,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。 - 是具有包含
GPUTextureUsage.STORAGE_BINDING的usage的GPUTexture的视图。
- 其
- 如果资源布局对象是
texture,则相应的绑定GPUTextureView- 其
dimension等于资源布局对象的viewDimension(有关纹理视图设置的更多详细信息,请参阅GPUTexture.createView())。 - 其
format与资源布局对象的sampleType兼容。 - 是具有包含
GPUTextureUsage.TEXTURE_BINDING的usage的GPUTexture的视图。 - 是具有大于 1 的
sampleCount的GPUTexture的视图(如果资源布局对象的multisampled属性为true),或者等于 1(如果为false)。
- 其
示例
注意: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 |
浏览器兼容性
加载中…