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 |
浏览器兼容性
加载中…