GPUDevice:createBuffer() 方法
注意:此功能在 Web Workers 中可用。
createBuffer() 方法是 GPUDevice 接口的一个方法,用于创建一个 GPUBuffer,以便在 GPU 操作中存储原始数据。
语法
createBuffer(descriptor)
参数
描述符(descriptor)-
包含以下属性的对象:
label可选-
一个字符串,提供可用于识别对象的标签,例如在
GPUError消息或控制台警告中。 mappedAtCreation可选-
一个布尔值。如果设置为
true,则缓冲区将在创建时被映射,这意味着您可以通过调用GPUBuffer.getMappedRange()来立即设置缓冲区内的值。默认值为false。请注意,即使未设置
GPUBufferUsage.MAP_READ或GPUBufferUsage.MAP_WRITE使用标志,也可以将mappedAtCreation: true设置为缓冲区设置初始数据。 size-
一个表示缓冲区大小(以字节为单位)的数字。如果
mappedAtCreation设置为true,则此值必须是4的倍数。 usage-
表示
GPUBuffer允许使用的 位标志。可能的值在GPUBuffer.usage值表 中。请注意,可以通过按位 OR 分隔值来指定多个可能的用法,例如:
GPUBufferUsage.COPY_SRC | GPUBufferUsage.MAP_WRITE。
返回值
一个 GPUBuffer 对象实例。
异常
RangeErrorDOMException-
如果
mappedAtCreation设置为true,并且指定的size不是4的倍数,则会抛出此错误。
验证
调用 createBuffer() 时必须满足以下条件,否则会生成 GPUValidationError 并返回一个无效的 GPUBuffer 对象。
- 指定了有效的
usage。 - 指定了
GPUBufferUsage.MAP_READ,并且除了GPUBufferUsage.COPY_DST之外没有指定其他标志。 - 指定了
GPUBufferUsage.MAP_WRITE,并且除了GPUBufferUsage.COPY_SRC之外没有指定其他标志。
注意:如果缓冲区分配失败而没有任何特定副作用,则会生成一个 GPUOutOfMemoryError 对象。
示例
在我们的 基础计算演示 中,我们创建了一个用于读取 GPU 计算结果的输出缓冲区,以及一个用于 JavaScript 访问的映射暂存缓冲区。
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 |
浏览器兼容性
加载中…