if_comp - ps
シェーダーで計算できる値に基づく条件で、if bool - ps...else - ps...endif - ps ブロックを開始します。この命令は、条件に基づいてコードのブロックをスキップするために使います。
構文
if_comp src0, src1 |
---|
この場合
_comp は、2 つのソース レジスタの比較を表します。次のいずれかを指定できます。
構文 比較 _gt より大きい _lt より小さい _ge 以上 _le 以下 _eq 等しい _ne 等しくない src0 はソース レジスタです。要素を選択するには複製スィズルが必要です。
src1 はソース レジスタです。要素を選択するには複製スィズルが必要です。
解説
ピクセル シェーダーのバージョン | 1_1 | 1_2 | 1_3 | 1_4 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|---|---|---|
if_comp | x | x | x | x |
この命令は、条件に基づいてコードのブロックをスキップするために使います。
if (src0 comparison src1)
jump to the corresponding else or endif instruction;
浮動小数点数に対して「等しい」および「等しくない」比較モードを使うときは注意してください。浮動小数点計算では丸めが行われるので、エラーを避けるために Epsilon 値 (0 以外の小さい数値) に対して比較を行うことができます。
次のような制限があります。
- if_comp...else - ps...endif - ps ブロックは、(プレディケーション付きの if ブロックと共に) 最大 24 レイヤーまでネストすることができます。
- src0 レジスタと src1 レジスタには複製スィズルが必要です。
- if_comp ブロックは、else - vs または endif - vs 命令で終了しなければなりません。
- if_comp...else - ps...endif - ps ブロックは、loop ブロックをまたぐことはできません。if_comp ブロックは、完全に loop ブロックの内側または外側にある必要があります。
例
この命令は、条件付きの動的フロー制御を行います。
if_lt r3.x, r4.y
// Instructions to run if r3.x < r4.y
else
// Instructions to run otherwise
endif