subgroupXor
subgroupXor
对子组(subgroup)中所有“活动”调用的输入值 e 执行按位 XOR 规约,并将结果返回给该子组的每个调用。
核心优势
在 GPU 子组内以 O(1) 代价完成奇偶/标志聚合,无需共享内存与栅栏同步,比工作组循环与原子操作更高效。
常见用途
奇偶性/投票:将布尔条件映射为 0/1 后执行 XOR,快速判断满足条件的调用数是否为奇数(odd parity)。
构造子组级开关或抖动掩码:把每条 lane 的 0/1 标志经 XOR 聚合为统一控制信号。
位标志规约:对每个调用的位掩码进行按位 XOR 聚合,形成子组级控制位。
风格化/降噪:结合帧计数或坐标生成蓝噪点式的二值抖动图样。
如何调整
传入整型(int/uint)或整型向量,向量各分量独立做 XOR 规约。布尔请先映射为 0/1。仅当后台支持子组操作(例如 WGSL/WebGPU 的 subgroup 功能)时有效;在不支持的平台可能不可用或被降级。注意:仅“活动”调用参与规约,分支内使用时结果随活跃掩码而变。
代码示例
1// 例:用子组奇偶作为二值开关
2// 1) 任意条件(示例:距相机阈值)
3const predicate = positionView.z.lessThan( -5.0 );
4// 2) 布尔转 0/1
5const vote = predicate.cond( uint(1), uint(0) );
6// 3) 子组按位 XOR 规约(0=偶数,1=奇数)
7const parity = subgroupXor( vote );
8const isOdd = parity.equal( uint(1) );
9// 4) 用作可视化/开关
10material.emissiveNode = isOdd.cond( vec3(1.0), vec3(0.0) );