subgroupAll
subgroupAll
对 GPU 子组(subgroup / wave)执行“全为真”投票:当且仅当子组内所有激活调用的布尔谓词都为 true 时返回 true。该节点以方法形式使用:predicate.subgroupAll()。
核心优势
提供了极低开销的跨调用布尔归约(投票)能力,可用于快速判定子组一致性,从而做早退、分支裁剪或切换更高效的路径。
常见用途
在片元/计算阶段判断条件是否对子组内所有线程都成立,用于统一走轻量路径或跳过昂贵计算。
与 early-discard / 早退逻辑配合,避免不必要的纹理采样与复杂 BRDF。
调试或统计:检测子组内部是否存在分歧(divergence)。
如何调整
该节点本身无可调参数;通过修改输入谓词来改变结果。注意:依赖底层对子组/warp 操作的支持(例如 WebGPU 或相应的 GLSL/HLSL 扩展),在不支持的平台上应提供后备路径。
代码示例
1/* 方法式调用:将调用对象作为隐式参数 */
2const isFront = frontFacing; // bool
3const allFront = isFront.subgroupAll(); // 如果子组内全部为正面,则为 true
4
5allFront.cond( /* 统一处理正面 */ , /* 处理存在背面的情况 */ );