我不是HLSL编译器的专家,也不是他们如何与分支机构合作,但我已经阅读了关于这个问题的不同意见。所以具体一点:在C / C ++中,实现类似的东西是完全合理的:
if (factor == 0)
{
// Simple calculation in special case of factor=0
}
else if (factor == 1)
{
// Simple calculation in special case of factor=1
}
else
{
// Much more complex calculation in general case of arbitrary factor
}
在大多数时间因素为0或1的情况下。对于HLSL,情况是否相同?我多次读过HLSL编译器的工作方式不同,例如在生成的机器代码中,无论如何都要计算所有分支。在这种情况下,上述结构没有意义,只能用其他情况代替。
答案 0 :(得分:2)
如documentation中所述,您可以告诉编译器,是否应该执行这两种情况(标记[flatten]
)或仅执行一侧(标记[branch]
)。如果你使用像tex2D
这样的渐变函数,则不能使用分支,除非用tex2Dlod
之类的东西替换它们。