出力カラー レジスタ
ピクセル シェーダーカラー出力レジスタ (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 および up、texldb - ps、texldp - ps) などのグラデーション計算を暗黙的に呼び出す操作は実行できません。 命令のプレディケーションは、動的フロー制御とは見なされません。
関連トピック
-
複数のレンダー ターゲットを する (Direct3D 9)