次の方法で共有


宛先レジスタ書き込みマスク

書き込みマスクは、命令の完了後に書き込まれる宛先レジスタのコンポーネントを制御します。 出力書き込みマスクは、コンポーネントが .rgba または .xyzw の順序である限り許可されます。 つまり、.rba と .xw は有効なマスクです。 テクスチャ レジスタには 1 つのルール セットがあり、非テクスチャ レジスタには別のルール セットがあります。

構文

dst.writemask

 

where

  • dst は宛先レジスタです。
  • writemask は、セット (x,y,z,w) または (赤、緑、青、アルファ) のマスクのシーケンスです。

解説

次の宛先書き込みマスクを使用できます。

ピクセル シェーダーのバージョン 1_1 1_2 1_3 1_4 2_0 2_x 2_sw 3_0 3_sw
.xyzw (既定値) x x x x x x x x x
。Xyz x x x x x x x x x
。W x x x x x x x x x
任意のマスク x x x x x x

 

任意のマスクを使用すると、任意のチャネルセットを組み合わせてマスクを生成できます。 チャネルは、変換先の赤、青、アルファチャネルを更新する register.rba などの順序 r、g、b、a に一覧表示する必要があります。 任意のマスクは、バージョン 1_4 以降で使用できます。

宛先書き込みマスクが指定されていない場合、宛先書き込みマスクの既定値は rgba ケースになります。 つまり、宛先レジスタ内のすべてのチャネルが更新されます。

バージョン 1_0 から 1_3 の場合、 dp3 - ps dp3 算術命令では、.rgb または .rgba 出力書き込みマスクのみを使用できます。

宛先レジスタ書き込みマスクは、算術演算でのみサポートされます。 テクスチャ アドレス指定命令では使用できません。バージョン 1_4 命令、 texcrd - pstexld - ps_2_0以降を除きます。

既定では、4 つのカラー チャネルをすべて書き込みます。

// All four color channels can be written by explicitly listing them.
mul r0.rgba, t0, v0

// Or, the default mask can be used to write all four channels.
mul r0, t0, v0

アルファ書き込みマスクはスカラー 書き込みマスクとも呼ばれます。これは、スカラー パイプラインを使用するためです。

add r0.a, t1, v1

したがって、この命令は効果的にt1のアルファ成分とv1のアルファ成分の合計をr0.aに入れます。

カラー 書き込みマスクは、カラー チャネルへの書き込みを制御するために使用されます。

// The color write mask is also referred to as the vector write mask, 
//   because it uses the vector pipeline.
mul r0.rgb, t0, v0

バージョン 1_4 の場合、コピー先の書き込みマスクは、マスクが r,g,b,a に順序付けされている限り、任意の組み合わせで使用できます。

// This example updates the red, blue, and alpha channels.
mov r0.rba, r1

共同発行命令を使用すると、2 つの異なる可能性がある命令を同時に発行できます。 これは、アルファ パイプラインと RGB パイプラインで命令を実行することによって実現されます。

  mul r0.rgb, t0, v0
+ add r1.a,   t1, c1

このように命令をペアリングする利点は、ベクターパイプラインとスカラーパイプラインで異なる操作を並列で実行できるという点です。

これらの頂点シェーダー出力レジスタは、次の書き込みマスクに制限されます。

レジスタの種類 必須の書き込みマスク
oFog このスカラー レジスタでは明示的な書き込みマスクは許可されません
Opts このスカラー レジスタでは明示的な書き込みマスクは許可されません
oPos .xyzw(これが既定値)
Ot# 結合マスク: .x | .xy | .xyz | .xyzw (既定値)

 

ピクセル シェーダー レジスタ修飾子