用途:指导编写 WGSL 的 @compute 入口点,正确设置 workgroup 大小、调用 ID、共享内存、原子操作与屏障,避免着色器创建错误和 workgroup 内存数据竞争。
主要能力:说明计算内建值(global_invocation_id、local_invocation_id、local_invocation_index、workgroup_id、num_workgroups)及其关系;介绍 var<workgroup> 共享内存、atomic<i32>/atomic<u32> 与 atomicLoad、atomicStore、atomicAdd 等原子操作,以及 workgroupBarrier、storageBarrier、textureBarrier 和 subgroup 系列操作。
必要用法:@compute 函数必须带 @workgroup_size,省略是着色器创建错误,y、z 默认 1;用 global_invocation_id 索引数组存储时必须做边界检查,因为最后一个 workgroup 会越界;跨调用读取 var<workgroup> 时必须在写与读之间加 workgroupBarrier;多调用并发更新同一值应使用原子操作,读取 atomic<T> 用 atomicLoad 而非 =;屏障必须位于 workgroup 一致的控制流中;使用 subgroup 内建前需确认 adapter.features.has("subgroups")。
适用场景:归约、扫描、粒子与图像处理等计算管线;跨 workgroup 的顺序需用独立计算 pass,storageBarrier 只在单个 workgroup 内同步。
限制:资料未提供具体平台支持细节、性能数据或安装命令;subgroup 支持在 Chrome 较完整,Safari 与 Firefox 相对滞后。