次の方法で共有


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

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

構文

dst.writemask

 

どこ

  • 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 および upを除き、テクスチャ アドレッシング命令では使用できません。

既定では、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 (既定値)

 

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