GPUDevice: createBuffer() 方法

实验性: 这是一个 实验性技术
在生产环境中使用此功能前,请仔细查看 浏览器兼容性表格

安全上下文: 此功能仅在 安全上下文(HTTPS)中可用,某些或所有 支持的浏览器 中均适用。

createBuffer() 方法是 GPUDevice 接口的一部分,用于创建一个 GPUBuffer,用于存储在 GPU 操作中使用的原始数据。

语法

js
createBuffer(descriptor)

参数

descriptor

包含以下属性的对象

label 可选

一个字符串,提供一个标签,可用于识别对象,例如在 GPUError 消息或控制台警告中。

mappedAtCreation 可选

一个布尔值。如果设置为 true,则缓冲区将在创建时被映射,这意味着您可以通过调用 GPUBuffer.getMappedRange() 立即设置缓冲区内部的值。默认值为 false

请注意,即使未设置 GPUBufferUsage.MAP_READGPUBufferUsage.MAP_WRITE 使用标志,也可以将 mappedAtCreation: true 设置为可以设置缓冲区的初始数据。

size

表示缓冲区大小(以字节为单位)的数字。

usage

表示 GPUBuffer 允许使用的 按位标志。可能的值在 GPUBuffer.usage 值表 中。

请注意,可以通过用管道符号分隔值来指定多个可能的用途,例如

js
usage: GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE;

返回值

一个 GPUBuffer 对象实例。

验证

调用 createBuffer() 时必须满足以下条件,否则将生成 GPUValidationError 并返回一个无效的 GPUBuffer 对象

  • 指定了有效的 usage
  • 指定了 GPUBufferUsage.MAP_READ,并且除了 GPUBufferUsage.COPY_DST 之外没有指定其他标志。
  • 指定了 GPUBufferUsage.MAP_WRITE,并且除了 GPUBufferUsage.COPY_SRC 之外没有指定其他标志。
  • 指定了 mappedAtCreation: true,并且指定的 size 是 4 的倍数。

注意:如果缓冲区分配失败且没有任何特定副作用,则会生成 GPUOutOfMemoryError 对象。

示例

在我们 基本的计算演示 中,我们创建了一个输出缓冲区来读取 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,
});

规范

规范
WebGPU
# dom-gpudevice-createbuffer

浏览器兼容性

BCD 表格仅在启用了 JavaScript 的浏览器中加载。

另请参阅