GPUBuffer
GPUBuffer
是WebGPU API中的一个接口,它表示一块内存块,可以用来存储原始数据,并在 GPU 操作中使用。
GPUBuffer
对象实例是使用GPUDevice.createBuffer()
方法创建的。
实例属性
实例方法
destroy()
实验性-
销毁
GPUBuffer
。 getMappedRange()
实验性-
返回一个包含指定范围内
GPUBuffer
映射内容的ArrayBuffer
。 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 |
浏览器兼容性
BCD 表格仅在浏览器中加载