SuperAPI AI 工具集

webgpu-impl-async-patterns

通用与其它

查看项目

更新于 10-15 22:18

技能介绍

用途:该技能面向 WebGPU 渲染的异步结构设计,处理帧循环、缓冲区映射与管线加载,防止 CPU-GPU 停顿拖垮帧率。

主要能力:以 requestAnimationFrame 驱动帧循环,每帧经 queue.writeBuffer 更新 uniform,每帧新建 GPUCommandEncoder 编码并 queue.submit,绝不在回调内 await GPU 完成;用 mapAsync 与 mapState(unmapped/pending/mapped)管理缓冲区映射,getMappedRange 取数据后须先复制再 unmap;在加载阶段用 createRenderPipelineAsync/createComputePipelineAsync 异步编译管线;连续回读时用轮转 staging buffer,延迟一两帧读取;onSubmittedWorkDone 仅用于一次性检查点。

必要用法:mapAsync 与 getMappedRange 的 offset 须为 8 的倍数,size 须为 4 的倍数;mapAsync 与 onSubmittedWorkDone 的 Promise 按提交顺序结算;调用 mapAsync 前须确认 mapState === "unmapped";mapSync 属实验特性,仅在 Worker 且带 --enable-features=WebGPUMapSyncOnWorkers 时可用,需特性检测。

限制:不得在 requestAnimationFrame 内 await mapAsync 或 onSubmittedWorkDone,也不得每帧重建管线或复用 Encoder/CommandBuffer;unmap 后 ArrayBuffer 失效,不能再读取。mapSync 不在 1.0-stable 规范内,主线程、Safari、Firefox 均不可用。支持环境为 Chrome 113+、Safari 26+、Firefox 141+。