ShaderModel3裡面的條件判斷

2021-08-24 22:47:56 字數 820 閱讀 6387

shadermodel3裡面的if真是讓我有些小意外。

attribute&預設情況

dx sdk裡面提到if可以有兩個[attribute]可以用:

float result; if(k) else

或者:float result; [flatten]if(k) else //code after compilation float result1 = 1.0f; float result2 = 2.0f; cmp result k result1 result2

對於比較簡單的if,shader裡預設的是使用[flatten]這樣的,因為畢竟branch非常破壞並行性。

但是自己寫了很大的**塊在if和else端,結果是預設情況下仍舊是用[flatten]模式。

這個就是有點費解,或許compiler需要更加明顯的資訊或者編譯提示才會使用挑戰來避免掉大量的計算。

intrinsic指令

開始時候我還以為使用intrinsic指令會更快,類似step這樣的來避免使用if。

但是實際情況是step這樣的指令內部編譯的時候仍舊是會成為cmp這樣的彙編指令。

相反使用step,要做額外操作,反而沒有直接if來的直接。

簡而言之,不要有太多假設,一切以編出來的彙編**和profile工具為基準。

另外乙個比較搞笑的就是在使用gaussian blur的時候h pass和v pass唯一的不同就是kernel不一樣。

這種不一樣差別真的很小,就是乙個是[0,1]這樣的,乙個是[1,0]這樣的

結果編譯結果出來居然差了8條指令,這。。。

很奇怪呃。

C 裡String裡面的find

tolower 就是轉換為小寫 toupper就是轉換為大寫 例子如下 include include include using namespace std int main string裡面find的用法 a.find 查詢第一次出現的目標字串 include include include u...

python3 裡面的一些特性

寫 一些 python特性 mylist 1,2,3,45,6,7,8 other mylist 0 mylist 1 取前面倆位 for i in range 3 other mylist 0 2 取前倆位的範圍 other mylist 2 4 去下標2到4的倆位 mylist list ran...

DB2裡面的coalesce函式

coalesce 返回其引數中第乙個非空表示式 語法 coalesce expression1,expression2,expression n 所有表示式必須型別相同,或者可以隱式轉換為相同型別 返回型別 將相同的值作為 expression 返回。注釋 如果所有自變數均為 null,則 coal...