次の方法で共有


if_comp - ps

if bool - ps...else - ps...endif - ps ブロックを開始します。シェーダーで計算できる値に基づく条件があります。 この命令は条件に基づいてコード ブロックをスキップするために使用されます。

構文

if_comp src0, src1

 

ここで:

  • _comp は 2 つのソース レジスタを比較します。 次のいずれかを指定できます。

    構文 比較
    _gt より大きい
    _lt より小さい
    _ge 以上
    _le 以下
    _eq 等しい
    _ne 等しくない

     

  • src0 はソース レジスタです。 コンポーネントを選択するには Replicate スウィズルが必要です。

  • src1 はソース レジスタです。 コンポーネントを選択するには Replicate スウィズルが必要です。

解説

ピクセル シェーダーのバージョン 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;

浮動小数点の数値で比較モードの "等しい" と "等しくない" を使用するときはご注意ください。 浮動小数点の計算中に丸め処理が行われるため、エプシロン値 (ゼロではない小さな数値) に対して比較を行えば、エラーを回避できます。

次のような制約があります。

  • if_comp...else - ps...endif - ps ブロック (と述語付き if ブロック) は最大 24 層の深さまで入れ子にできます。
  • src0 レジスタと src1 レジスタには Replicate スウィズルが必要です。
  • if_comp ブロックは else - vs 命令か endif - vs 命令で終わる必要があります。
  • if_comp...else - ps...endif - ps ブロックはループ ブロックをまたぐことができません。 if_comp ブロックはループ ブロックの完全に中に置くか、完全に外に置く必要があります。

この命令からは条件付き動的フロー制御が提供されます。

if_lt r3.x, r4.y
// Instructions to run if r3.x < r4.y

else
// Instructions to run otherwise

endif

ピクセル シェーダー命令