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 |
瀏覽器相容性
載入中…