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