出力カラー レジスタ
ピクセル シェーダーカラー出力レジスタ (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 への書き込み時に、ソース swizzle (.xyzw = 既定の swizzle を除く) またはソース修飾子は使用できません。
- 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 以降、 texldb - ps、 texldp - ps などのグラデーション計算を暗黙的に呼び出す操作) を実行することはできません。 命令の割り込みは、動的フロー制御とは見なされません。
関連トピック