setp_comp - vs

プレディケーション レジスタを設定します。

構文

setp_comp dst, src0, src1

この場合

  • _comp は、2 つのソース レジスタのチャンネルごとの比較です。次のいずれかを指定できます。

    構文 比較
    _gt より大きい
    _lt より小さい
    _ge 以上
    _le 以下
    _eq 等しい
    _ne 等しくない
  • dst はプレディケーション レジスタレジスタ (p0) です。

  • src0 はソース レジスタです。

  • src1 はソース レジスタです。

解説 

頂点シェーダーのバージョン 1_1 2_0 2_x 2_sw 3_0 3_sw
setp_comp x x x x

この命令は次のように動作します。

per channel in destination write mask
{
  dst.channel = src0.channel cmp src1.channel
}

デスティネーション書き込みマスクに従って書き込むことができるチャンネルごとに、対応する src0 と src1 のチャンネル間の比較演算のブール値の結果を (ソース修飾子のスィズルが解決された後で) 保存します。

ソース レジスタでは、任意の要素のスィズルを指定できます。

デスティネーション レジスタでは、任意の書き込みマスクを使用できます。

dest レジスタは、プレディケーション レジスタでなければなりません。

プレディケーション レジスタの適用

setp を使って初期化したプレディケーション レジスタは、要素ごとの命令の制御に使用できます。次に構文を示します。

([!]p0[.swizzle]) instruction dest, srcReg, ...

この場合

  • [!] はオプションのブール値 NOT です。
  • p0 はプレディケーション レジスタです。
  • [.swizzle] はオプションのスィズルで、命令のマスクに使用する前にプレディケーション レジスタの内容に適用します。使用できるスィズルは、.xyzw (何も指定されない場合の既定)、または任意の複製スィズル.x/.r、.y/.g、.z/.b、.a/.w. です。
  • instruction は、任意の算術命令またはテクスチャー命令です。静的または動的フロー制御命令は指定できません。
  • dest, srcReg, ... は、命令に必要なレジスタです。

プレディケーション レジスタが (true, true, false, false) という要素の値を使って設定されていると仮定した場合、次の命令に適用し、

// given r0 = 0,0,1,1
// given r1 = 1,1,0,0
setp_le p0, r0, r1
(p0) add r2, r3, r4

2 つの要素の加算を実行できます。

r2.x = r3.x + r4.x
r2.y = r3.y + r4.y

プレディケーション レジスタの要素 z と w に false が格納されているので、r2 の x 要素と y 要素は書き込まれません。

プレディケーション レジスタを算術命令またはテクスチャー命令に適用すると、命令スロット カウントが 1 増えます。

プレディケーション レジスタは、if pred - vscallnz pred - vs、および breakp - vs 命令にも適用できます。これらのフロー制御命令では、プレディケーション レジスタを使用しても命令スロット カウントは増えません。