DXGKCB_CREATECONTEXTALLOCATIONコールバック関数 (d3dkmddi.h)
DXGKCB_CREATECONTEXTALLOCATION は、GPU コンテキストまたはデバイス固有のコンテキストを割り当てます。
構文
DXGKCB_CREATECONTEXTALLOCATION DxgkcbCreatecontextallocation;
NTSTATUS DxgkcbCreatecontextallocation(
[in/out] INOUT_PDXGKARGCB_CREATECONTEXTALLOCATION unnamedParam1
)
{...}
パラメーター
[in/out] unnamedParam1
割り当てるコンテキストの属性を指定する DXGKARGCB_CREATECONTEXTALLOCATION 構造体へのポインター。
戻り値
成功した場合、DXGKCB_CREATECONTEXTALLOCATION は STATUS_SUCCESS を返します。 それ以外の場合は、Ntstatus.hで定義されているエラー コードのいずれかを返します。
備考
WDDM 1.2 以降では、ディスプレイ ミニポート ドライバーは、GPU 固有のコンテキスト (GPU コンテキストの割り当て) またはデバイス固有のコンテキスト (デバイス コンテキストの割り当て) を割り当てることができます。
GPU コンテキストの割り当てにより、GPU は、実行の途中で割り込まれた DMA バッファーからのコンテキスト状態を格納できます。 ドライバーは、GPU コンテキストに関連付けられた割り当てを作成して、必要に応じて状態を保存します。 オペレーティング システムは、このコンテキストからのコマンドが GPU のハードウェア実行キューに配置される前に、コンテキスト割り当てが常駐していることを確認します。 コンテキストは、別のコンテキストからのコマンドがハードウェア実行キューに配置されるまで常駐します。
さらに、オペレーティング システムでは、コンテキストに属するコマンドを完了した後もハードウェア コンテキストの状態が GPU で保持されていると仮定することで、遅延 GPU コンテキストの切り替えをサポートしています。 この方法では、別のコンテキストからのコマンドがハードウェア キューに送信された場合にのみ、コンテキストが GPU で切り替わります。
DXGKCB_XXX 関数は、Dxgkrnlによって実装されます。 このコールバック関数を使用するには、DXGKARGCB_ALLOCATEPAGESFORMDL のメンバーを設定し、DXGKRNL_INTERFACEを介して DxgkCbCreateContextAllocation 呼び出します。
GPU コンテキストの割り当て
GPU コンテキストの割り当ては、システム以外のコンテキストに対してのみ行うことができます。 ディスプレイ ミニポート ドライバーは、DxgkDdiCreateContext呼び出すことによって、これらのコンテキストを作成します。 システム 以外のコンテキストを作成するために、ドライバーは、DXGK_CREATECONTEXTFLAGS 構造体の SystemContext メンバーを 0 に設定し、pCreateContext パラメーターでこの構造体へのポインターを渡します。
デバイス コンテキストの割り当ては同様のモデルに従います。ただし、関連付けられているデバイスに属するすべてのコンテキストに対して常駐状態のままになる点が異なります。 このモデルを使用すると、ドライバーは GPU コンテキストの割り当てを使用して GPU コンテキスト保存領域 (CSA) データを格納し、ページ テーブル データを格納するためにデバイス コンテキストの割り当てを使用できます。
デバイス コンテキストの割り当て
デバイス コンテキストの割り当ては、システム以外のデバイスに対してのみ行うことができます。 ディスプレイ ミニポート ドライバーは、DxgkDdiCreateDevice呼び出すことによって、これらのデバイスを作成します。 システム以外のデバイスを作成するには、ドライバーは、DXGK_CREATEDEVICEFLAGS 構造体の Flags.SystemDevice メンバーを 0 に設定し、pCreateDevice パラメーターでこの構造体へのポインターを渡します。
ディスプレイ ミニポート ドライバーは、DxgkCbCreateContextAllocationを介して割り当てられたコンテキスト リソースを解放する DXGKCB_DESTROYCONTEXTALLOCATION を呼び出します。
宛先コンテキスト割り当ての仮想アドレス
ディスプレイ ミニポート ドライバーが DxgkCbCreateContextAllocation 呼び出すときに、オペレーティング システムがターゲット コンテキストの割り当て (InitContextResource->Destination->VirtualAddress DXGKARG_BUILDPAGINGBUFFER メンバー) に対して有効な (NULL 以外の) 仮想アドレスを設定するようにするには、次の操作を行う必要があります。
- DXGK_ALLOCATIONINFOFLAGS 構造体の CpuVisible と保護された メンバー 設定します。
- DXGKARGCB_CREATECONTEXTALLOCATION 構造体の SupportedSegmentSet メンバーを設定して、アロケーション内のページを絞りセグメントのみに設定します。
必要条件
要件 | 価値 |
---|---|
サポートされる最小クライアント | Windows 8 (WDDM 1.2) |
サポートされる最小サーバー | Windows Server 2012 |
ターゲット プラットフォーム の | デスクトップ |
ヘッダー | d3dkmddi.h (D3dkmddi.h を含む) |
IRQL | PASSIVE_LEVEL |
関連項目
DXGKARGCB_CREATECONTEXTALLOCATION
DXGKCB_DESTROYCONTEXTALLOCATION
DxgkDdiCreateContextの
DxgkDdiCreateDeviceをする