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

浏览器兼容性

另见