GPUDevice:createBuffer() 方法

可用性有限

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

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

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

createBuffer() 方法是 GPUDevice 介面的一個方法,用於建立一個 GPUBuffer,以便在 GPU 操作中儲存原始資料。

語法

js
createBuffer(descriptor)

引數

描述符(descriptor)

包含以下屬性的物件:

label 可選

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

mappedAtCreation 可選

一個布林值。如果設定為 true,則緩衝區將在建立時被對映,這意味著您可以透過呼叫 GPUBuffer.getMappedRange() 來立即設定緩衝區內的值。預設值為 false

請注意,即使未設定 GPUBufferUsage.MAP_READGPUBufferUsage.MAP_WRITE 使用標誌,也可以將 mappedAtCreation: true 設定為緩衝區設定初始資料。

size

一個表示緩衝區大小(以位元組為單位)的數字。如果 mappedAtCreation 設定為 true,則此值必須是 4 的倍數。

usage

表示 GPUBuffer 允許使用的 位標誌。可能的值在 GPUBuffer.usage 值表 中。

請注意,可以透過按位 OR 分隔值來指定多個可能的用法,例如:GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE

返回值

一個 GPUBuffer 物件例項。

異常

RangeError DOMException

如果 mappedAtCreation 設定為 true,並且指定的 size 不是 4 的倍數,則會丟擲此錯誤。

驗證

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

  • 指定了有效的 usage
  • 指定了 GPUBufferUsage.MAP_READ,並且除了 GPUBufferUsage.COPY_DST 之外沒有指定其他標誌。
  • 指定了 GPUBufferUsage.MAP_WRITE,並且除了 GPUBufferUsage.COPY_SRC 之外沒有指定其他標誌。

注意:如果緩衝區分配失敗而沒有任何特定副作用,則會生成一個 GPUOutOfMemoryError 物件。

示例

在我們的 基礎計算演示 中,我們建立了一個用於讀取 GPU 計算結果的輸出緩衝區,以及一個用於 JavaScript 訪問的對映暫存緩衝區。

js
const output = device.createBuffer({
  size: BUFFER_SIZE,
  usage: GPUBufferUsage.STORAGE | GPUBufferUsage.COPY_SRC,
});

const stagingBuffer = device.createBuffer({
  size: BUFFER_SIZE,
  usage: GPUBufferUsage.MAP_READ | GPUBufferUsage.COPY_DST,
});

規範

規範
WebGPU
# dom-gpudevice-createbuffer

瀏覽器相容性

另見