2013-05-18 51 views
0

我不是HLSL编译器的专家,他们是如何与分支机构合作的,但我对这个问题有不同的看法。所以要具体:在C/C++,将可以完美地实现这样的:HLSL编译器优化奇怪吗?

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

回答

2

documentation中所述,您可以告诉编译器,是否应该执行两种情况(标签[flatten])或仅标记一侧(标签[branch])。如果您使用梯度功能,如tex2D,则不能使用分支,只能用tex2Dlod之类的替换它们。