GPUBuffer

可用性有限

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

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

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

GPUBuffer 介面是 WebGPU API 的一部分,代表一塊記憶體,可用於儲存供 GPU 操作使用的原始資料。

GPUBuffer 物件例項透過 GPUDevice.createBuffer() 方法建立。

例項屬性

label

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

mapState 只讀

一個表示 GPUBuffer 對映狀態的列舉值。

size 只讀

一個以位元組為單位表示 GPUBuffer 記憶體分配長度的數字。

usage 只讀

表示 GPUBuffer 允許使用的 按位標誌

例項方法

destroy()

銷燬 GPUBuffer

getMappedRange()

返回一個 ArrayBuffer,其中包含指定範圍內 GPUBuffer 的對映內容。

mapAsync()

對映 GPUBuffer 的指定範圍。返回一個 Promise,當 GPUBuffer 的內容已準備好透過 GPUBuffer.getMappedRange() 訪問時,該 Promise 將解析。

unmap()

取消對映 GPUBuffer 的對映範圍,使其內容可再次供 GPU 使用。

示例

在我們 基本的計算演示 中,我們建立了一個輸出緩衝區來讀取 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,
});

稍後,一旦 stagingBuffer 包含 GPU 計算的結果,將使用 GPUBuffer 方法的組合將資料讀回 JavaScript,以便將其記錄到控制檯。

js
// map staging buffer to read results back to JS
await stagingBuffer.mapAsync(
  GPUMapMode.READ,
  0, // Offset
  BUFFER_SIZE, // Length
);

const copyArrayBuffer = stagingBuffer.getMappedRange(0, BUFFER_SIZE);
const data = copyArrayBuffer.slice(0);
stagingBuffer.unmap();
console.log(new Float32Array(data));

規範

規範
WebGPU
# gpubuffer

瀏覽器相容性

另見