用途:指导在 WebGPU 中录制 GPU 工作。核心流程为每帧创建 GPUCommandEncoder,编码渲染或计算通道及拷贝命令,调用 finish() 得到 GPUCommandBuffer,再通过 device.queue.submit() 提交。命令缓冲为一次性使用,提交后不可复用。
主要能力:device.createCommandEncoder({label}) 创建编码器;beginRenderPass(descriptor) 与 beginComputePass({label,timestampWrites}) 分别开启渲染、计算通道,通道须用 passEncoder.end() 结束;copyBufferToBuffer、copyBufferToTexture、copyTextureToBuffer、copyTextureToTexture 直接在编码器上录制,不能写在打开的通道内;resolveQuerySet 解析查询;finish({label}) 生成命令缓冲;queue.onSubmittedWorkDone() 等待完成。
使用方式:每帧新建编码器与命令缓冲;finish() 前必须结束所有通道;拷贝命令置于通道之外;copyBufferToBuffer 的偏移与大小须为 4 的倍数,缓冲区-纹理拷贝 bytesPerRow 须为 256 的倍数;resolveQuerySet 的 destinationOffset 须为 256 的倍数;时间戳查询需先请求 timestamp-query 特性。
适用场景:渲染绘制、计算着色器 dispatchWorkgroups、资源间数据搬运、GPU 计时与遮挡查询。
限制:不要在每帧循环内 await onSubmittedWorkDone() 或 mapAsync(),以免 CPU-GPU 停顿;不得在 finish() 后继续录制;不得在通道未关闭时 finish();不得重复提交同一命令缓冲;不得在无 timestamp-query 特性时创建时间戳查询集。版本为 WebGPU 1.0-stable,Chrome 113+、Safari 26+、Firefox 141+。参考文件 methods.md、examples.md、anti-patterns.md 提供签名、示例与反模式说明。