DXGI DDI のサポート

Microsoft DirectX グラフィックス インフラストラクチャ (DXGI) デバイス ドライバー インターフェイス (DDI) をサポートするには、ユーザー モードディスプレイ ドライバーに Dxgiddi.h ヘッダー ファイルを含める必要があります。 Dxgiddi.h には Dxgitype.h ヘッダー ファイルも含まれており、このファイルにはアプリケーション レベルの DXGI コンストラクトと共有される定義が含まれています。 Dxgiddi.h は、複数のユーザー モードディスプレイ ドライバー エントリ ポイントと、 (ディスプレイ ミニポート ドライバーを含む) ドライバーがカーネルとの通信に使用できる DXGI コールバック関数を定義します。

Microsoft Direct3D ランタイムは、DXGI_DDI_BASE_ARGS 構造体内の DXGI DDI へのアクセスを提供し、この構造体は DXGIBaseDDI (D3D10DDIARG_CREATEDEVICE 構造体のメンバー) が CreateDevice(D3D10) 関数の呼び出し時に指しています。 ユーザー モード ディスプレイ ドライバーは、DXGI 関数へのポインターを提供します。

ドライバーは、pDXGIDDIBaseFunctionsXxx (DXGI_DDI_BASE_ARGS 構造体のメンバー) が指す構造体のメンバーを介してこれらの関数を実装します。 ドライバーは、pDXGIBaseCallbacks (DXGI_DDI_BASE_ARGS のメンバー) が指す DXGI コールバック関数テーブルへのポインターを後で使用できるように記録する必要があります。 Direct3D ランタイムは、ユーザー モード ディスプレイ ドライバー内にスレッドがない場合にコールバック関数のアドレスを変更できるため、ドライバーは DXGI コールバック関数への個々のポインターを記録するのではなく、DXGI コールバック関数テーブルへのポインターを記録する必要があります。

ソフトウェア ラスタライザーには、さらに DXGI ユーザー モードディスプレイ ドライバーの要件が存在します。 このようなユーザー モード ディスプレイ ドライバー (具体的には、グラフィックス アダプター上の Direct3D バージョン 9 DDI 実装と共有されているハードウェアをサポートしていないドライバー) は、DXGI_STATUS_NO_REDIRECTION 値を (その CreateDevice(D3D10) 関数から得た S_OK 値の代わりに) 返す必要があります。 この戻り値は、共有リソース プレゼンテーション パスを使用してデスクトップ ウィンドウ マネージャー (DWM) との通信に影響を与えないことを DXGI に示します。 共有リソースのプレゼンテーション パスは、共有リソース関数 (つまり、CreateResource(D3D10) 関数と OpenResource(D3D10) 関数) の呼び出しで、D3D10_DDI_RESOURCE_MISC_SHARED フラグが設定されている場合に作成されます。 ただし、DXGI では、代わりに、CPU でのみ使用できるバッファーを持つスワップチェーンに関連する手法を使用する必要があります。 たとえば、DXGI では、共有リソース プレゼンテーション パス以外の方法で、レンダリングされたデータをバック バッファーからデスクトップに移動する必要があります。 この状況では、DXGI は実際にドライバーの PresentDXGI 関数を呼び出して、DWM との効果通信ではなく、レンダリングされたデータを移動します。

Direct3D バージョン 10 個の DXGI の関数

このセクションでは、ユーザー モード ディスプレイ ドライバー DLL が Microsoft Direct3D バージョン 10 ランタイムに提供する Microsoft DirectX グラフィックス インフラストラクチャ (DXGI) 関数について説明します。 ドライバーは、ユーザー モード ディスプレイ ドライバーの CreateDevice(D3D10) 関数の呼び出しで、DXGI_DDI_BASE_FUNCTIONS 構造体のメンバーを介して、カーネル サービス アクセス関数へのポインターを提供する DXGI 関数を提供します。

BltDXGI: GetGammaCapsDXGI

PresentDXGI: QueryResourceResidencyDXGI

ResolveSharedResourceDXGI: RotateResourceIdentitiesDXGI

SetDisplayModeDXGI: SetResourcePriorityDXGI

Direct3D バージョン 11.1 個の DXGI の関数

このセクションでは、Microsoft Direct3D バージョン 11.1 ランタイム用に追加される、ユーザー モードのディスプレイ ドライバーによって実装される Microsoft DirectX グラフィックス インフラストラクチャ (DXGI) 関数について説明します。 Direct3D 11.1 は Windows 8 で導入されました。

ユーザー モード ディスプレイ ドライバー DLL は、OpenAdapter10_2 関数をエクスポートし、ランタイムが CreateDevice(D3D10) を呼び出すときに、D3D10_2DDI_ADAPTERFUNCS 構造体のメンバーを介して、アダプター固有の関数へのポインターを提供します。

ドライバーは、ユーザー モード ディスプレイ ドライバーのアダプター固有の CreateDevice(D3D10) 関数の呼び出しで、DXGI1_2_DDI_BASE_FUNCTIONS 構造体のメンバーを介して Direct3D バージョン 11.1 DXGI 関数へのポインターを提供します。

Direct3D バージョン 11.2 個の DXGI の関数

このセクションでは、Microsoft Direct3D バージョン 11.2 ランタイム用に追加される、ユーザー モードのディスプレイ ドライバーによって実装される Microsoft DirectX グラフィックス インフラストラクチャ (DXGI) 関数について説明します。 Direct3D 11.2 は Windows 8.1 で導入されました。

ユーザー モード ディスプレイ ドライバー DLL は、OpenAdapter10_2 関数をエクスポートし、ランタイムが CreateDevice(D3D10) を呼び出すときに、D3D10_2DDI_ADAPTERFUNCS 構造体のメンバーを介して、アダプター固有の関数へのポインターを提供します。

ドライバーは、ユーザー モード ディスプレイ ドライバーのアダプター固有の CreateDevice(D3D10) 関数の呼び出しで、DXGI1_3_DDI_BASE_FUNCTIONS 構造体のメンバーを介して Direct3D バージョン 11.2 DXGI 関数へのポインターを提供します。

PFNDDXGIDDI_PRESENT_MULTIPLANE_OVERLAYCB: PFNDDXGIDDI_PRESENTCB

PFNDDXGIDDI_SUBMITPRESENTBLTTOHWQUEUECB: PFNDDXGIDDI_SUBMITPRESENTTOHWQUEUECB

Note

Direct3D 11.2 ランタイムでサポートされる追加の DXGI 関数は、ユーザー モード ドライバーによって実装されるマルチプレーン オーバーレイ関数のセクションに含まれています。