用途:帮助在 WebGPU 中正确创建 GPUBuffer、选择合法的 GPUBufferUsage 标志组合,并完成数据上传与 CPU 回读,避免 createBuffer 校验失败。基线为 WebGPU 1.0-stable:Chrome 113+、Safari 26+、Firefox 141+。
主要能力:device.createBuffer({ label?, size, usage, mappedAtCreation? }) 返回 GPUBuffer,size 以字节计,usage 用 | 组合标志。硬性规则:MAP_READ 只能与 COPY_DST 组合,MAP_WRITE 只能与 COPY_SRC 组合,其他组合均校验失败。GPUBuffer 提供 mapAsync、getMappedRange、unmap、destroy、mapState、size、usage。queue.writeBuffer(buffer, bufferOffset, data, dataOffset?, size?) 是最简单的 CPU 到 GPU 上传路径,缓冲区需含 COPY_DST。
使用方式:静态初始数据用 mappedAtCreation: true,通过 getMappedRange 写入后 unmap,size 必须是 4 的倍数,无需 COPY_DST;随时间变化的数据用 COPY_DST 加 queue.writeBuffer;GPU 到 CPU 回读需先建 COPY_DST | MAP_READ 暂存缓冲区,copyBufferToBuffer 后提交,再 mapAsync(GPUMapMode.READ)、getMappedRange、复制数据、unmap。
限制:STORAGE 缓冲区不能映射;unmap 后 getMappedRange 返回的 ArrayBuffer 会被分离,须先复制数据;mapState 为 pending 或 mapped 时调用 mapAsync 会拒绝;不要在渲染循环中 await mapAsync。对齐细节见 webgpu-core-memory-model,本技能不重复。