次の方法で共有


出力カラー レジスタ

ピクセル シェーダーカラー出力レジスタ (oC#) は、結果を複数のレンダー ターゲットに出力する書き込み専用レジスタです。

構文

oC#

 

どこ:

名前 形容
oC0 レンダー ターゲット #0
oC1 レンダー ターゲット #1
oC2 レンダー ターゲット #2
oC3 レンダー ターゲット #3

 

備考

  • oCn が書き込まれるが、対応するレンダー ターゲットがない場合、oCn へのこの書き込みは無視されます。
  • レンダリング状態D3DRS_COLORWRITEENABLE、D3DRS_COLORWRITEENABLE1、D3DRS_COLORWRITEENABLE2、D3DRS_COLORWRITEENABLE3によって、最終的にレンダー ターゲットに書き込まれる oCn のコンポーネントが決定されます (ブレンド後(該当する場合)。 シェーダーが特定の oCn レジスタに対して D3DRS_COLORWRITEENABLE* レンダリング状態で定義されているコンポーネントの一部を書き込む場合、書き込まれていないチャネルは対応するレンダー ターゲットで未定義の値を生成します。 oCn のコンポーネントが書き込まれていない場合は、対応するレンダー ターゲットを (前述のように) まったく更新しないでください。そのため、D3DRS_COLORWRITEENABLE* レンダリング状態は適用されません。

シェーダー モデル 2 の制限事項

  • oCn は、mov - ps 命令でのみ書き込むことができます。
  • oC0 は常にシェーダーで記述する必要があります。
  • oCn に書き込むときに、ソース スウィズル (.xyzw = 既定のスウィズルを除く) またはソース修飾子は使用できません。
  • 任意の oCn に書き込むときに、宛先の書き込みマスク (.xyzw = 既定のマスクを除く) または命令修飾子は使用できません。
  • oCn が書き込まれる場合は、oC0 - oCn-1 も書き込む必要があります。 たとえば、oC2 に書き込むには、oC0 と oC1 にも書き込む必要があります。
  • シェーダーごとに最大 1 つの oC# への書き込みが許可されます。
  • ps_2_xとps_3_0の場合、動的フロー制御または事前設定内で oC# および oD# レジスタに書き込むことはできません (静的フロー制御内の oC# への書き込みは問題ありません)。

シェーダー モデル 3 の制限事項

  • ps_3_0の場合、出力レジスタ oC# と oD# は何度でも書き込むことができます。 ピクセル シェーダーの出力は、シェーダーの実行の終了時に出力レジスタの内容から取得されます。 出力レジスタへの書き込みが行われなかった場合 (フロー制御が原因の場合や、シェーダーが書き込まなかった場合など) は、対応するレンダーターゲットも更新されません。 出力レジスタ内のチャネルのサブセットが書き込まれると、未定義の値が残りのチャネルに書き込まれます。
  • ps_3_0の場合、oC# レジスタは任意の書き込みマスクで書き込むことができます。
  • ps_2_xとps_3_0の場合、動的フロー制御または事前設定内で oC# および oD# レジスタに書き込むことはできません (静的フロー制御内の oC# への書き込みは問題ありません)。
  • 分岐条件がプリミティブ単位 (動的フロー制御命令) によって異なるフロー制御ステートメント内では、グラデーション計算 (または、texld - ps_2_0 および uptexldb - pstexldp - ps) などのグラデーション計算を暗黙的に呼び出す操作は実行できません。 命令のプレディケーションは、動的フロー制御とは見なされません。

レジスタ

複数のレンダー ターゲットを する (Direct3D 9)