次の方法で共有


DXGKDDI_CREATEALLOCATION コールバック関数 (d3dkmddi.h)

DxgkDdiCreateAllocation 関数は、システムまたはビデオ メモリの割り当てを作成します。

構文

DXGKDDI_CREATEALLOCATION DxgkddiCreateallocation;

NTSTATUS DxgkddiCreateallocation(
  [in]     IN_CONST_HANDLE hAdapter,
  [in/out] INOUT_PDXGKARG_CREATEALLOCATION pCreateAllocation
)
{...}

パラメーター

[in] hAdapter

ディスプレイ アダプターに関連付けられているコンテキスト ブロックへのハンドル。 ディスプレイ ミニポート ドライバーは、DxgkDdiAddDevice 関数の MiniportDeviceContext 出力パラメーターの Microsoft DirectX グラフィックス カーネル サブシステムにこのハンドルを以前に提供しました。

[in/out] pCreateAllocation

割り当てを作成するための情報を含む DXGKARG_CREATEALLOCATION 構造体へのポインター。

戻り値

DxgkDdiCreateAllocation は、次のいずれかの値を返します。

リターン コード 説明
STATUS_SUCCESS DxgkDdiCreateAllocation によって 割り当てが正常に作成されました。
STATUS_INVALID_PARAMETER DxgkDdiCreateAllocation に渡されたパラメーターには、完了できなかったエラーが含まれていました。
STATUS_NO_MEMORY DxgkDdiCreateAllocation で、完了するために必要なメモリを割り当てませんでした。
STATUS_GRAPHICS_DRIVER_MISMATCH ディスプレイ ミニポート ドライバーは、 DxgkDdiCreateAllocation への呼び出しを開始したユーザー モードのディスプレイ ドライバーと互換性がありません。

注釈

ユーザー モードディスプレイ ドライバーが pfnAllocateCb 関数を呼び出した後、DirectX グラフィックス カーネル サブシステムは、ディスプレイ ミニポート ドライバーの DxgkDdiCreateAllocation 関数を呼び出して割り当てを作成します。 ディスプレイ ミニポート ドライバーは、ユーザー モードディスプレイ ドライバーから渡されるプライベート データ (各割り当てのDXGK_ALLOCATIONINFO構造体の pPrivateDriverData メンバー内) を解釈する必要があり、ビデオ メモリ マネージャーを介して各割り当てを作成するために必要なパラメーターの一覧を決定する必要があります。 ディスプレイ ミニポート ドライバーがビデオ メモリ マネージャーにこれらのパラメーターを提供する方法の詳細については、「 割り当てを作成するときにセグメントを指定する」を参照してください。

ディスプレイ ミニポート ドライバーは、割り当てハンドルを返す必要があります。これは通常、割り当てに関する情報を含むプライベート ドライバー データ構造へのポインターです。 ディスプレイ ミニポート ドライバーは、割り当てハンドルのプライベート データを取得するために DxgkCbGetHandleData 関数をいつでも呼び出すことができます。 したがって、ディスプレイ ミニポート ドライバーは、プライベート割り当てハンドル テーブルを維持するために必要ありません。 実際、高速ユーザー スイッチ、ホット プラグなど、ディスプレイ モードスイッチのシナリオでは、プライベート ハンドル テーブルが古くなったり DirectX グラフィックス カーネル サブシステムと同期しなくなる可能性があるため、強く推奨します。

ユーザー モード ディスプレイ ドライバーは、リソースまたはデバイスに割り当てを割り当てます。 割り当てがリソースに属しているかどうかを判断するために、ディスプレイ ミニポート ドライバーは、リソース ビット フィールド フラグが DxgkDdiCreateAllocationpCreateAllocation パラメーターが指すDXGKARG_CREATEALLOCATION構造体の Flags メンバーに設定されているかどうかをチェックできます。 割り当てがリソースに属している場合、ディスプレイ ミニポート ドライバーはリソース ハンドルを返すことができます (ただし、必須ではありません)。 これは通常、リソースを記述するプライベート ドライバー データ構造へのポインターです。 DirectX グラフィックス カーネル サブシステムが DxgkDdiCreateAllocation を呼び出して既存のリソースの追加の割り当てを作成した場合、DXGKARG_CREATEALLOCATION の hResource メンバーには、そのリソースの以前の DxgkDdiCreateAllocation 呼び出しによって返されたハンドルが含まれます。 必要に応じて、ディスプレイ ミニポート ドライバーは 、DxgkDdiCreateAllocation の呼び出し中にリソース ハンドルを変更できます。

ユーザー モードディスプレイ ドライバーがコマンド バッファーにリソース ハンドルを配置する場合、ディスプレイ ミニポート ドライバーは DxgkCbGetHandleData を呼び出すことによってプライベート データを取得できます。 ディスプレイ ミニポート ドライバーは、 DxgkCbEnumHandleChildren 関数を呼び出すことによって、リソースのすべての子割り当てを列挙することもできます。

Windows 7 以降では、ディスプレイ ミニポート ドライバーが DXgkDdiCreateAllocation 関数の呼び出しを処理して GDI ハードウェア アクセラレーションの割り当てを作成する場合、ドライバーは割り当てのサイズ (CPU 表示割り当てのピッチ値を含む) を設定する必要があります。pCreateAllocation-pAllocationInfo-Size>。>

DxgkDdiCreateAllocation 呼び出しで作成されたリソースは、デバイスではなくアダプターに属しています。 ディスプレイ ミニポート ドライバーは、プライベート割り当ておよびリソース データ構造内の任意の場所でデバイス データを参照しないでください。 サーフェス共有のため、ユーザー モード ディスプレイ ドライバーによってリソースが作成されたデバイスが破棄された後、リソースが使用されている可能性があります。

DxgkDdiCreateAllocation をページング可能にする必要があります。

履歴バッファーの割り当て

Windows 8.1以降、DxgkDdiCreateAllocation が呼び出されると、ディスプレイ ミニポート ドライバーはDXGK_ALLOCATIONINFOFLAGSを設定できます。ユーザー モード ドライバーが履歴バッファーの作成と破棄を管理できることを示す HistoryBuffer メンバー。

要件

要件
サポートされている最小のクライアント Windows Vista
対象プラットフォーム デスクトップ
Header d3dkmddi.h
IRQL PASSIVE_LEVEL

こちらもご覧ください

DXGKARG_CREATEALLOCATION

DXGK_ALLOCATIONINFO

DXGK_ALLOCATIONINFOFLAGS

DxgkCbEnumHandleChildren

DxgkCbGetHandleData

DxgkDdiAddDevice

pfnAllocateCb