GPUBuffer
注意:此功能在 Web Workers 中可用。
GPUBuffer 介面是 WebGPU API 的一部分,代表一塊記憶體,可用於儲存供 GPU 操作使用的原始資料。
GPUBuffer 物件例項透過 GPUDevice.createBuffer() 方法建立。
例項屬性
例項方法
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,以便將其記錄到控制檯。
GPUBuffer.mapAsync()用於對映GPUBuffer以進行讀取。GPUBuffer.getMappedRange()用於返回一個包含GPUBuffer內容的ArrayBuffer。GPUBuffer.unmap()用於在我們將內容讀取到 JavaScript 中後,再次取消對映GPUBuffer。
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 |
瀏覽器相容性
載入中…