0

我不是 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 情况代替。

4

1 回答 1

2

文档中所述,您可以告诉编译器,是应该执行两种情况(tag [flatten])还是只执行一侧(tag [branch])。如果您使用渐变函数tex2D,则不能使用分支,除非您将它们替换为tex2Dlod.

于 2013-05-18T09:43:51.927 回答