次の方法で共有


遅延コンテキストの概要

このセクションは、Windows 7 以降、および Windows Server 2008 R2 以降のバージョンの Windows オペレーティング システムのみを対象としています。

遅延コンテキストは、コマンド リストを作成するためにアプリケーションによって使用されます。 ユーザー モードのディスプレイ ドライバーが、 D3D11DDI_THREADING_CAPS 構造体のD3D11DDICAPS_COMMANDLISTS_BUILD_2 フラグを使用してコマンド リストをサポートすることを示している場合は、遅延コンテキストを作成および操作する機能もサポートする必要があります。 ドライバーがスレッドの能力を示す方法の詳細については、 「スレッド処理、コマンド リスト、および 3-D パイプラインのサポート」を参照してください。 遅延コンテキストは、生成されたコマンド リストを実行することによって、アプリケーションがコマンドの実行を明示的に要求するまで遅延コンテキスト レコードを実行できないという点で、即時コンテキストとは異なります。 遅延コンテキストを作成して使用するために、Direct3D バージョン 11 には次の新しい DDI 関数が用意されています。 これらの関数は、デバイスと即時のコンテキストの組み合わせを作成するために必要な情報のサブセットです。

CalcPrivateDeferredContextSize 関数CreateDeferredContext 関数のセマンティクスは、他の同様の DDI 関数と似ています。

Direct3D ランタイムは、ドライバーの CreateDeferredContext 関数を呼び出すたびに、新しいドライバーハンドルとコア レイヤー ハンドルを渡して、各遅延コンテキストを作成します。 各遅延コンテキストのパイプライン状態は、クリア状態操作が実行された後の即時コンテキストのパイプライン状態と同等である必要があります。 ドライバーは、 D3D11DDIARG_CREATEDEFERREDCONTEXT 構造体の p11ContextFuncs メンバーが指す D3D11DDI_DEVICEFUNCS 構造体のメンバーに、その関数テーブルの関数のサブセットを格納する必要があります。ランタイムは、対応する遅延コンテキストのそれぞれを使用 D3D10DDI_HDEVICE、D3D11DDIARG_CREATEDEFERREDCONTEXT の hDrvContext メンバーがこの関数テーブルで指定する値を処理します。

ドライバーは、遅延コンテキストの pfnCreatepfnOpen、および pfnDestroy で始まる関数を提供し続ける必要があります。 これらの関数は、遅延コンテキストの残りの部分と同じスレッド セマンティクスを共有し、 「コンテキスト ローカル DDI ハンドルの使用」説明に従って、コンテキスト ローカル DDI ハンドルを開いたり閉じたりするために使用されます。 pfnCalcPrivate または pfnCheck始まる関数 は、遅延コンテキストには利用されません。したがって、ドライバーは、遅延コンテキストの作成時にこれらの関数の D3D11DDI_DEVICEFUNCS のメンバーを NULL に設定できます。 再メインデバイス機能の大部分は、遅延コンテキストのサポートに利用されます。 ただし、ドライバーは QueryGetData 関数を利用しません。 ただし、ドライバーは ResourceMap 関数と ResourceUnmap 関数を利用します。 ドライバーは、即時コンテキスト ハンドルを使用して、即時コンテキストで Direct3D バージョン 11 リソース クランプの ResourceIsStagingBusy 関数と新しい DDI 関数のみをサポートします。 遅延コンテキストに利用されない関数の完全な一覧については、 「遅延コンテキストの DDI 関数の除外」を参照してください。

ドライバーは、D3D11DDIARG_CREATEDEFERREDCONTEXTの p11UMCallbacks メンバーが指すメモリ ブロックで提供される コア レイヤーコールバック 関数を利用します。 これらのコア レイヤーコールバック関数は、遅延コンテキストごとに更新状態 DDI を提供します。 ただし、最も重要なのは、Direct3D 10 からの変更に関する記事で説明されている pfnPerformAmortizedProcessingCb コールバック関数の 追加です。

ドライバーは、D3D11DDI_CORELAYER_DEVICECALLBACKSの pfnDisableDeferredStagingResourceDestruction メンバーが有効をポイントする pfnDisableDeferredStagingResourceDestruction コールバック関数を 想定 しないでください。 ドライバーは、デバイス/即時コンテキストの CreateDevice(D3D10) 関数内で pfnDisableDeferredStagingResourceDestruction を呼び出す必要があります。その後、ドライバーは新しい Direct3D バージョン 11 DDI セマンティクスで pfnDisableDeferredStagingResourceDestruction を呼び出すべきではありません。

ドライバーの RecycleCreateDeferredContext 関数は、遅延コンテキストのパイプライン状態をクリアする必要があります。これは、ドライバーの CreateDeferredContext が遅延コンテキストのパイプライン状態をクリアする方法と同様です。 ランタイムは、ドライバーの AbandonCommandListCreateCommandList、または RecycleCreateCommandList を呼び出した後、ドライバーの DestroyDevice(D3D10) または RecycleCreateDeferredContext 関数で遅延コンテキスト ハンドルを使用できます。 RecycleCreateDeferredContext の 詳細については、 「小さなコマンド リストの最適化」を参照してください。