Share via


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