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

頂点シェーダー命令