2011-12-08 8 views
1

シェイダーではif(x>a && x<b)が許されますが、私の理解は論理テストが遅いです。これは、線に沿って最適化する価値がある:シェーダプログラミング - 2つの値の間でテストする場合

mid = (a+b)*.5; 
half = (b-a)*.5; 
if(abs(x - mid) < half){...} 

それはより多くのコードをようだが、CPUのASMの日から、そのようなトリックは時々やる価値でした。

halfmidはCPUに一度計算し、シェーダのパラメータとして渡すことができれば、我々は交換してください:とif(x>a && x<b)if(abs(x - mid) < half)は - で悩ま価値がこののですか?

私のテストでは、halfmidをあらかじめ計算されたシェーダパラメータに引き上げていますが、テストするGPUは1つだけですので、私は一般的な答えの後にあります。それは劇的に良くなったり悪くなったりするでしょう。

答えて

0

シェーダ・パラメータの事前計算部分は、式が一定であることを理解するのに十分なほどスマートなことが多いため、特にdirectxの場合は無関係です。

質問はabsがどのように実装されているかです。あなたのターゲットGPUは何ですか?モバイル、ミッド、ハイエンド?

関連する問題