出力深度レジスタ
ピクセル シェーダー出力深度レジスタ (oDepth) は、深度ステンシル バッファーに対する深度テストの新しい深度値を返す範囲 [0..1] を持つ書き込み専用スカラー レジスタです。
構文
oDepth |
---|
この場合、
名前 | Description |
---|---|
oDepth | 深度ステンシル バッファーに対する深度テストの新しい深度値 |
oDepth に書き込むと、深度テストのパフォーマンスを向上させるハードウェア固有の深度バッファー最適化アルゴリズム (階層 Z) が失われることに注意することが重要です。
oDepth に書き込む場合は、ソース スウィズル (.x | .y | .z | .w) をレプリケートする必要があります。 明示的な書き込みマスクは使用できません。
oDepth レジスタに書き込むと、補間された深度値が置き換えられます (深度バイアス/傾きスケールのレンダーステートは無視されます)。 深度バッファーが作成されていないか、デバイスにアタッチされていない場合、oDepth への書き込みは無視されます。
マルチサンプリングを行い、oDepth に書き込む場合、ピクセル シェーダーはピクセルごとに 1 回だけ実行されるため、深度値は対象となるすべてのサブサンプルの場所にレプリケートされます。 深度テストは引き続きサンプルごとに行われますが、oDepth を書き込まなかった場合と同様に、ピクセル シェーダーからの比較にサンプルごとの深度値はありません。
アプリケーションに深度バッファーとして w バッファーが設定されている場合は、oDepth への書き込み中にそれを考慮する必要があります。 w 範囲情報をピクセル シェーダーに送信し、w 範囲を計算して、書き込まれた w 値を oDepth にスケーリングする必要がある可能性があります。
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 以降、 texldb - ps、 texldp - ps などのグラデーション計算を暗黙的に呼び出す操作) を実行することはできません。 命令の割り込みは、動的フロー制御とは見なされません。
関連トピック