出力深度レジスタ
ピクセル シェーダー出力深度レジスタ (oDepth) は、深度ステンシル バッファーに対する深度テストの新しい深度値を返す、範囲 [0..1] の書き込み専用スカラー レジスタです。
構文
oDepth |
---|
どこ:
名前 | 形容 |
---|---|
oDepth | 深度ステンシル バッファーに対する深度テストの新しい深度値 |
oDepth に書き込むと、深度テストのパフォーマンスを向上させるハードウェア固有の深度バッファー最適化アルゴリズム (階層 Z) が失われることに注意することが重要です。
oDepth に書き込む場合は、ソース スウィズル (.x | .y | .z | .w) をレプリケートする必要があります。 明示的な書き込みマスクは使用できません。
oDepth レジスタに書き込むと、補間された深度値が置き換えられます (深度バイアス/傾きスケールレンダーステートは無視されます)。 深度バッファーが作成されていないか、デバイスに接続されていない場合、oDepth への書き込みは無視されます。
マルチサンプリングして oDepth に書き込む場合、ピクセル シェーダーはピクセルごとに 1 回だけ実行されるため、対象となるすべてのサブサンプルの場所に対して深度値がレプリケートされます。 深度テストはサンプルごとに引き続き行われますが、oDepth を記述しなかった場合と同様に、ピクセル シェーダーからの比較にサンプルごとの深度値はありません。
アプリケーションに深度バッファーとして w バッファー が設定されている場合は、oDepth への書き込み中にそれを考慮する必要があります。 w 範囲情報をピクセル シェーダーに送信し、w 範囲を計算して oDepth に書き込まれた w 値をスケーリングする必要がある可能性があります。
ps_2_0とps_2_xの制限
- oDepth は、mov - ps 命令でのみ記述でき、1 回だけ実行できます。
- oDepth への書き込み時にソース修飾子は使用できません。
- oDepth への書き込み時に命令修飾子は使用できません。
- フロー制御コンストラクト内から、またはプリディケーションを使用する場合、oDepth に書き込む必要はありません。
ps_3_0制限
- ps_3_0の場合、出力レジスタ oC# と oD# は何度でも書き込むことができます。 ピクセル シェーダーの出力は、シェーダーの実行の終了時に出力レジスタの内容から取得されます。 出力レジスタへの書き込みが発生しない場合 (フロー制御が原因の場合や、シェーダーが書き込まなかった場合など)、対応するレンダー ターゲットも更新されません。 出力レジスタ内のチャネルのサブセットが書き込まれると、未定義の値が残りのチャネルに書き込まれます。
- すべての可能なパスが最終的にレジスタに書き込まれる限り、フロー制御またはプレディケーション内で oDepth に書き込むことができます。
- 分岐条件がプリミティブ単位 (動的フロー制御命令) によって異なるフロー制御ステートメント内では、グラデーション計算 (または、texld - ps_2_0 および up、texldb - ps、texldp - ps) などのグラデーション計算を暗黙的に呼び出す操作は実行できません。 命令のプレディケーションは、動的フロー制御とは見なされません。
関連トピック