HLSL编译器优化奇怪?

时间:2013-05-18 00:20:01

标签: optimization compiler-construction compilation hlsl

我不是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编译器的工作方式不同,例如在生成的机器代码中,无论如何都要计算所有分支。在这种情况下,上述结构没有意义,只能用其他情况代替。

1 个答案:

答案 0 :(得分:2)

documentation中所述,您可以告诉编译器,是否应该执行这两种情况(标记[flatten])或仅执行一侧(标记[branch])。如果你使用像tex2D这样的渐变函数,则不能使用分支,除非用tex2Dlod之类的东西替换它们。