workgroupId
workgroupId
在计算着色器中,为当前工作组 (Workgroup) 提供其在整个派发网格 (Dispatch Grid) 中的唯一三维坐标 (ID)。
核心优势
核心优势是实现数据分区。它允许每个工作组根据其唯一 ID 计算出在大型数据缓冲区(如纹理或数组)中应处理的数据子集的起始位置,这是实现大规模并行计算的基础。
常见用途
图像处理(如应用滤镜、分形生成)
大规模粒子系统更新
三维网格或体积数据计算(如流体模拟)
如何调整
`workgroupId` 本身是只读的,无法直接调整。它的值和取值范围由 CPU 端调用 `compute(dispatchX, dispatchY, dispatchZ)` 时的派发维度参数决定。通过改变这些派发计数值,可以控制工作组的数量和排布,从而间接影响着色器中 `workgroupId` 的值。
代码示例
1const globalInvocationId = workgroupId.mul( workgroupSize ).add( localInvocationId );
2const index = globalInvocationId.x;
3
4// 使用唯一索引精确地读写缓冲区
5outputBuffer.element( index ).assign( inputBuffer.element( index ).mul( 2.0 ) );