深度ステンシル値のコピー

Microsoft Direct3D ランタイムは、ユーザー モード ディスプレイ ドライバーの Blt 関数を呼び出して、深度ステンシル値をビデオ メモリからシステム メモリにコピーします。その逆も同様です。 ドライバーとハードウェアは、ドライバーでサポートされているすべての不透明な深度ステンシル形式 (つまり、D3DDDIFMT_D*_LOCKABLE を除く D3DDDIFORMAT 列挙型で定義されているすべての形式) との間、または次のいずれかの形式との間で形式変換を実行する必要があります。

  • D3DDDIFMT_D16_LOCKABLE

  • D3DDDIFMT_D32_LOCKABLE

  • D3DDDIFMT_D32F_LOCKABLE

  • D3DDDIFMT_S8_LOCKABLE

ドライバーは、ソース形式で存在するチャネル (深度またはステンシル) を削除しますが、変換先の形式で存在するチャンネルは削除しません。 ランタイムでは、共通のチャネル タイプを共有しない深度ステンシル サーフェイス間のコピーは許可されません。

ドライバーは、最初にソース深度値を 32 ビット符号なし整数値に変換し、次に 32 ビット符号なし整数値から変換先の表現に変換します。 これらの両方の変換には、次のルールが適用されます。

  • ソース深度値が浮動小数点値の場合、[0,1] へのクランプが適用され、その結果に _MAX_UINT が乗算されます。

  • ソースが整数で、変換先が精度の低い整数の場合、右端の余分なビットが削除されます。

  • ソースが整数で、変換先が高い精度の整数の場合、右端の余分なビットが左端の最上位ビットからレプリケートされます。

  • ソースが整数で、変換先が浮動小数点値の場合、32 ビット整数は浮動小数点値に変換され、その結果が _MAX_UINT で除算されます。

ドライバーは、一様に分散されていない深度値に特別な処理を提供する必要はありません。

ドライバーは、ソース ステンシル値を 8 ビット整数に拡張します (つまり、ドライバーは、ソース ステンシルの値の左側をゼロで埋ます)。 変換先の表現で使用する精度が低い場合、ドライバーは変換を実行するために最上位ビットを破棄して変換を実行する必要があります。

ユーザー モードのディスプレイ ドライバーは、任意のサブ矩形の深度ステンシル コピーをサポートする必要があります。 ただし、ドライバーは、深度ステンシルのコピー中にミラー、ストレッチ、またはカラー キーの操作を実行する必要はありません。 ポイント サンプリングは、深度ステンシル のコピー中に暗黙的に必要です。