GPUDevice: createBindGroup() 方法

可用性有限

此特性不是基線特性,因為它在一些最廣泛使用的瀏覽器中不起作用。

安全上下文: 此功能僅在安全上下文(HTTPS)中可用,且支援此功能的瀏覽器數量有限。

注意:此功能在 Web Workers 中可用。

GPUDevice 介面的 createBindGroup() 方法基於 GPUBindGroupLayout 建立一個 GPUBindGroup。該佈局定義了一組要組合在一起的資源,以及這些資源如何在著色器階段中使用。

語法

js
createBindGroup(descriptor)

引數

描述符(descriptor)

包含以下屬性的物件:

entries

一個描述要暴露給著色器的資源的條目物件陣列。陣列中的每個物件都對應於 layout 中引用的 GPUBindGroupLayout 所描述的相應條目。每個條目物件具有以下屬性:

binding

一個數字,表示此資源繫結的唯一識別符號,它匹配 GPUBindGroupLayout 中相應條目的 binding 值。此外,它還匹配相關管道中使用的著色器(GPUShaderModule)中 @binding(n) 屬性的 n 索引值。

resource

要繫結的資源。可以是以下之一:

label 可選

一個字串,提供可用於識別物件的標籤,例如在 GPUError 訊息或控制檯警告中。

layout

entries(此繫結組的條目)將符合的 GPUBindGroupLayout

GPUBufferBinding 物件

GPUBufferBinding 物件可以包含以下屬性:

buffer

要繫結的 GPUBuffer 物件。

offset 可選

buffer 開始到緩衝區繫結在著色器中暴露的範圍開始處的位元組偏移量。如果省略,offset 預設為 0。

size 可選

緩衝區繫結的位元組大小。如果省略,size 將是從 offset 開始到 buffer 結束的範圍。如果同時省略 offsetsize,則整個緩衝區都會暴露給著色器。

返回值

一個 GPUBindGroup 物件例項。

驗證

呼叫 createBindGroup() 時必須滿足以下條件,否則會生成 GPUValidationError,並返回一個無效的 GPUBindGroup 物件:

  • layout GPUBindGroupLayout 中的條目數量等於 entries 中條目物件的數量。
  • 對於 layout GPUBindGroupLayout 中的每個條目,entries 中相應的條目物件都綁定了正確的資源型別。例如,一個 buffer 資源佈局物件在相應的繫結中指定了一個 GPUBufferBinding 物件。
  • 如果資源佈局物件是 buffer
    • 相應的繫結 GPUBuffer
      • 其繫結部分(由 offsetsize 指定)完全包含在其內,並且大小非零。
      • 大小大於 buffer 資源佈局的 minBindingSize
    • 如果資源佈局物件的 type"uniform"
      • 繫結的 GPUBufferusage 包含 GPUBufferUsage.UNIFORM
      • 繫結的緩衝區段的有效大小小於或等於 GPUDevicemaxUniformBufferBindingSize 限制
      • 指定的 GPUBufferBinding offsetGPUDeviceminUniformBufferOffsetAlignment 限制 的倍數。
    • 如果資源佈局物件的 type"storage""read-only-storage"
      • 繫結的 GPUBufferusage 包含 GPUBufferUsage.STORAGE
      • 繫結的緩衝區段的有效大小小於或等於 GPUDevicemaxStorageBufferBindingSize 限制
      • 繫結的緩衝區段的有效大小是 4 的倍數。
      • 指定的 GPUBufferBinding offsetGPUDeviceminStorageBufferOffsetAlignment 限制 的倍數。
  • 如果資源佈局物件是 storageTexture,則相應的繫結 GPUTextureView
    • dimension 等於資源佈局物件的 viewDimension(有關紋理檢視設定的更多詳細資訊,請參閱 GPUTexture.createView())。
    • format 等於資源佈局物件的 sampleType
    • mipLevelCount 等於 1。
    • 是具有包含 GPUTextureUsage.STORAGE_BINDINGusageGPUTexture 的檢視。
  • 如果資源佈局物件是 texture,則相應的繫結 GPUTextureView
    • dimension 等於資源佈局物件的 viewDimension(有關紋理檢視設定的更多詳細資訊,請參閱 GPUTexture.createView())。
    • format 與資源佈局物件的 sampleType 相容。
    • 是具有包含 GPUTextureUsage.TEXTURE_BINDINGusageGPUTexture 的檢視。
    • 是具有大於 1 的 sampleCountGPUTexture 的檢視(如果資源佈局物件的 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

瀏覽器相容性

另見