用途
WebGPU 技能面向需要设计、实现、调试、审查和优化可移植 WebGPU 应用与 WGSL 着色器的开发者。它适用于构建渲染或计算管线、GPU 模拟等场景,帮助在浏览器环境中建立可观察、可验证的 GPU 工作流。
主要能力
该技能把每个 WebGPU 特性视为五类显式契约:
- 能力契约:基线、可选特性与限制、回退方案。
- 数据契约:WGSL 类型、字节偏移、步长、用途标志。
- 通道契约:读取、写入、顺序、乒乓所有权。
- 呈现契约:画布格式、物理尺寸、透明度与颜色。
- 生命周期契约:创建、调整尺寸、错误、丢失与销毁。
技能提供完整的 Vite 起步模板,用于新建浏览器项目。模板包含带类型标注的计算与渲染粒子场,具备乒乓缓冲、编译诊断、尺寸调整处理、指针交互、设备丢失报告与清理功能。
使用方式
技能建议从资源与通道图出发。在编写 WGSL 之前,先列出持久资源和通道所有权,例如 CPU 种子通过 writeBuffer 写入状态 A,状态 A 经计算步骤生成状态 B 并渲染到画布,状态 B 再经计算步骤生成状态 A 并渲染。对每个通道记录入口点与调度/绘制维度、绑定与着色器可见性、读取/写入/复制的资源、通道后成为权威的状态、边界守卫与同步假设。当某个通道需要前一状态同时产生下一状态时,应使用不同资源。通道边界能排序命令,但不会使跨调用就地读取的算法具有确定性。
构建顺序为:决定不支持 WebGPU 时是回退、降级模式还是明确失败;请求适配器以及工作负载实际使用的可选特性与提升限制;定义 WGSL 结构体并计算精确的主机偏移与数组步长;分配并标记持久资源;编译着色器模块、检查 getCompilationInfo() 后创建管线;创建稳定绑定组或仅在资源变化时重建;编码最小通道、提交并验证可见或数值输出;逐一加入尺寸调整、输入、模拟计时、回读与销毁;仅在预期工作负载下正确性稳定后再进行性能分析。
技能还给出按工作负载选择模式的对照表:独立粒子或记录使用存储缓冲、带守卫的一维调度与实例化渲染;基于邻居的粒子先做空间分箱或分块邻域再成对计算;元胞自动机或模板使用乒乓状态、二维调度与固定模拟节奏;轨迹、模糊或迭代图像使用乒乓纹理与显式计算/渲染通道;后处理先渲染到中间纹理再合成;交互式检查使用 GPU 过滤/压缩通道加有界暂存回读;生成式或模块化着色器使用稳定绑定契约、组合通道阶段与编译诊断。
适用场景
适用于浏览器中的渲染管线、计算管线、GPU 模拟、粒子系统、元胞自动机、图像后处理、交互式检查以及模块化着色器生成等场景。技能建议从可移植的核心路径开始,将 shader-f16、时间戳查询、子组、存储格式、语言扩展与提升限制作为可选加速器,而非静默要求。
限制与注意事项
技能列出一系列不变量:将 adapter.features 与 adapter.limits 视为可能性,设备仅暴露在 requestDevice() 时请求并授予的能力;不要用“所有结构体都是 16 字节对齐”作为打包规则,需计算 AlignOf、SizeOf、成员偏移、数组步长与 uniform 特定约束;在访问资源前守卫每个过度调度的计算调用;将 workgroupBarrier() 与 storageBarrier() 保持在参与工作组的统一控制流中;除非工作负载确实改变描述符,不要每帧创建缓冲、纹理、采样器、绑定组或管线;避免在动画或指针循环中进行完整 GPU 到 CPU 回读,应在 GPU 上压缩有界结果并映射小型暂存缓冲;将传给 createShaderModule() 的 WGSL 视为可执行输入,优先使用打包且经过审查的着色器源码,默认不要让应用在运行时编译网络获取或终端用户提供的 WGSL;根据渲染后的 CSS 尺寸与 DPR 调整画布后备存储,并钳制到设备限制、跳过无操作赋值;暴露表面着色器编译消息、未捕获错误、管线验证失败与 device.lost;在销毁资源前停止动画与观察者,取消配置拥有的画布上下文并在适当时销毁设备。
验证方面,技能建议对主机代码按当前 @webgpu/types 进行类型检查,不要用 @ts-nocheck 隐藏错误;在支持 WebGPU 的浏览器中运行并检查编译消息与未捕获错误;测试零尺寸/隐藏启动、尺寸调整、DPR 变化、后台标签页计时与销毁/重建;在 navigator.gpu 不可用的路径上测试回退或失败 UI;确认缓冲大小、复制偏移、每行字节数、动态偏移、调度计数与设备限制;以视觉方式检查启动与稳态或断言有界数值结果;在禁用回读与调试插桩的情况下比较性能;审查现有代码时,先报告正确性与生命周期风险,再考虑微优化。
技能还提供按需加载的详细文档:initialization-and-lifecycle.md 涵盖适配器、设备、特性、限制、画布配置、丢失与清理;wgsl-data-layout.md 用于定义或调试主机可共享缓冲;compute-patterns.md 涵盖工作组、乒乓状态、固定步骤、网格、屏障与有界回读;rendering-patterns.md 涵盖画布尺寸、实例化、中间目标与反馈;debugging-and-performance.md 涵盖编译消息、错误作用域、标签、性能分析与症状驱动诊断;creative-recipes.md 用于将视觉或模拟想法转化为通道图;compatibility.md 用于选择回退或可选特性;current-sources.md 用于对照活跃一手来源验证不稳定或近期新增的 API。