关于GL_KHR_shader_subgroup扩展和计算着色器... gl_SubgroupInvocationID
是一维的(单个uint
),而工作组最多可以是3维的。所以我想知道gl_LocalInvocationID
的3维数(工作组中的线程)在每个子组中。
例如:假设我有16x16x1工作组,而gl_SubgroupSize
是32。如何确定当前工作组的哪些线程在子组0(gl_SubgroupInvocationID == 0
)中?
答案 0 :(得分:2)
将工作组划分为子组是实现定义的。此外,您不应该在意它。
子组功能的目的是促进子组之间的相互通信。询问与您的调用有关的其他子组中计算的值。唯一关心子组之间特定“物理”关系的函数是Quad
函数,该函数处理片段着色器中2x2块上的操作。