次の方法で共有


出力深度レジスタ

ピクセル シェーダー出力深度レジスタ (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 - pstexldp - ps などのグラデーション計算を暗黙的に呼び出す操作) を実行することはできません。 命令の割り込みは、動的フロー制御とは見なされません。

レジスタ