2013-05-18 70 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之類的替換它們。