if_comp - vs
if bool - vs...else - vs...endif - vs ブロックを開始します。シェーダーで計算できる値に基づく条件があります。 この命令は条件に基づいてコード ブロックをスキップするために使用されます。
構文
if_comp src0, src1 |
---|
ここで:
_comp は 2 つのソース レジスタを比較します。 次のいずれかを指定できます。
構文 比較 _gt より大きい _lt より小さい _ge 以上 _le 以下 _eq 等しい _ne 等しくない src0 はソース レジスタです。 コンポーネントを選択するには Replicate スウィズルが必要です。
src1 はソース レジスタです。 コンポーネントを選択するには Replicate スウィズルが必要です。
解説
頂点シェーダーのバージョン | 1_1 | 2_0 | 2_x | 2_sw | 3_0 | 3_sw |
---|---|---|---|---|---|---|
if_comp | x | x | x | x |
この命令は条件に基づいてコード ブロックをスキップするために使用されます。
if_lt src0, src1
jump to the corresponding else or endif instruction;
浮動小数点の数値で比較モードの "等しい" と "等しくない" を使用するときはご注意ください。 浮動小数点の計算中に丸め処理が行われるため、エプシロン値 (ゼロではない小さな数値) に対して比較を行えば、エラーを回避できます。
次のような制約があります。
- if_comp...else - vs...endif - vs ブロック (と述語付き if ブロック) は最大 24 層の深さまで入れ子にできます。
- src0 レジスタと src1 レジスタには Replicate スウィズルが必要です。
- if_comp ブロックは else - vs 命令か endif - vs 命令で終わる必要があります。
- if_comp...else - vs...endif - vs ブロックはループ ブロックをまたぐことができません。 if_comp ブロックは loop - vs ブロックの完全に中に置くか、完全に外に置く必要があります。
例
この命令からは条件付き動的フロー制御が提供されます。
if_lt r3.x, r4.y
// Instructions to run if r3.x < r4.y
else
// Instructions to run otherwise
endif
関連トピック