次の方法で共有


DXGI1_1_DDI_BASE_FUNCTIONS 構造体 (dxgiddi.h)

DXGI1_1_DDI_BASE_FUNCTIONS構造体には、ユーザー モード ディスプレイ ドライバーが実装できる関数へのポインターが含まれており、出力にレンダリングされたフレームの表示、ガンマの制御、共有サーフェスと GDI 相互運用可能なサーフェスに関する通知の取得、全画面表示の切り替えの管理などの低レベルのタスクを実行できます。

構文

typedef struct DXGI1_1_DDI_BASE_FUNCTIONS {
  HRESULT()(DXGI_DDI_ARG_PRESENT *) * pfnPresent;
  HRESULT()(DXGI_DDI_ARG_GET_GAMMA_CONTROL_CAPS *) * pfnGetGammaCaps;
  HRESULT()(DXGI_DDI_ARG_SETDISPLAYMODE *) * pfnSetDisplayMode;
  HRESULT()(DXGI_DDI_ARG_SETRESOURCEPRIORITY *) * pfnSetResourcePriority;
  HRESULT()(DXGI_DDI_ARG_QUERYRESOURCERESIDENCY *) * pfnQueryResourceResidency;
  HRESULT()(DXGI_DDI_ARG_ROTATE_RESOURCE_IDENTITIES *) * pfnRotateResourceIdentities;
  HRESULT()(DXGI_DDI_ARG_BLT *) * pfnBlt;
  HRESULT()(DXGI_DDI_ARG_RESOLVESHAREDRESOURCE *) * pfnResolveSharedResource;
} DXGI1_1_DDI_BASE_FUNCTIONS;

メンバー

pfnPresent

ドライバーの PresentDXGI 関数へのポインター。

pfnGetGammaCaps

ドライバーの GetGammaCapsDXGI 関数へのポインター。

pfnSetDisplayMode

SetDisplayModeDXGI 関数は、GDI デスクトップがサポートしていない表示モードまたはプライマリに切り替わります。

Microsoft Direct3D ランタイムは SetDisplayModeDXGI を呼び出して、GDI デスクトップがサポートしていない表示モードまたはプライマリに切り替えます。 次の一覧では、このようなプライマリの例について説明します。

  • チャネルあたり 10 ビット (10:10:10:2) で作成されたプライマリは、ターゲット形式 (たとえば、D3DFMT_A2R10G10B10) を表示およびレンダリングします。
  • スキャンアウト中に複数サンプリングが実行される、複数サンプリングされたプライマリ
  • 全画面表示の Microsoft DirectX バージョン 10 アプリケーションで使用される永続的なプライマリ
Direct3D ランタイムは、ユーザー モード ディスプレイ ドライバーの CreateResource(D3D10) 関数を呼び出して、スキャン対象のプライマリを作成します。ただし、ドライバーは、 SetDisplayModeDXGI 関数が呼び出された場合にのみ、ハードウェアをスキャンするようにプログラムする必要があります。 そのため、ランタイムは、pDisplayModeData パラメーターによって指されるDXGI_DDI_ARG_SETDISPLAYMODE構造体の hResource メンバーと SubResourceIndex メンバーを、ドライバーの CreateResourceD3D10 関数の呼び出しによって作成されたプライマリに設定します。 ドライバーは、hResource と SubResourceIndex表すプライマリをプライマリ割り当てハンドルに変換する必要があります。 ドライバーがこの変換を行った後、ドライバーは pfnSetDisplayModeCb 関数の呼び出しで結果のハンドルを渡す必要があります。これにより、ディスプレイ ミニポート ドライバーの DxgkDdiCommitVidPn 関数の呼び出しが開始されます。

ユーザー モード ディスプレイ ドライバーは、pfnSetDisplayModeCb の呼び出しでD3DDDICB_SETDISPLAYMODE構造体の hPrimaryAllocation メンバーを設定して、割り当てをスキャンできます。 ただし、割り当てはプライマリとしてマークする必要があります (つまり、ユーザー モードのディスプレイ ドライバーは、割り当てを作成する pfnAllocateCb 関数の呼び出しで、D3DDDI_ALLOCATIONINFO構造体の Flags メンバーにプライマリ ビット フィールド フラグを設定する必要があります)。

pDisplayModeData

表示モードを設定するためのパラメーターを指定する DXGI_DDI_ARG_SETDISPLAYMODE 構造体へのポインター。

pfnSetResourcePriority

ドライバーの SetResourcePriorityDXGI 関数へのポインター。

pfnQueryResourceResidency

ドライバーの QueryResourceResidencyDXGI 関数へのポインター。

pfnRotateResourceIdentities

ドライバーの RotateResourceIdentitiesDXGI 関数へのポインター。

pfnBlt

ドライバーの BltDXGI 関数へのポインター。

pfnResolveSharedResource

ResolveSharedResourceDXGI 関数は、共有サーフェスの所有権が変更されたこと、または GDI 相互運用にサーフェスが使用されていることをユーザー モードのディスプレイ ドライバーに通知します。

Direct3D ランタイムは、アプリケーションが次のいずれかの関数を呼び出すとき に ResolveSharedResourceDXGI を呼び出します。

  • 同期された共有サーフェス上の IDXGIKeyedMutex::ReleaseSynch
  • GDI 相互運用可能なサーフェスの IDXGISurface1::GetDC
ランタイムは、共有サーフェスの所有者が変更されるたびに、または GDI 相互運用にサーフェスが使用されるたびに、ドライバーの ResolveSharedResourceDXGI 関数を呼び出します。

ドライバーは ResolveSharedResourceDXGI を実装して、複数の GPU シナリオのリソースを適切に管理します。 各リソースは、複数の GPU をレンダリングするためにメモリ間で分割される場合があります。 ドライバーは ResolveSharedResourceDXGI を実装して、新しいリソース所有者がマージされたリソースを持つよう各リソースを再マージできます。 ドライバーは、リソースを変更する可能性がある部分的にビルドされたコマンド バッファーをフラッシュする必要があります。

Windows 7 にはIS_DXGI1_1_BASE_FUNCTIONS マクロ (D3D10umddi.h ヘッダー ファイルで定義されています) が用意されており、ユーザー モードのディスプレイ ドライバーが CreateDevice(D3D10) 関数の呼び出しでDXGI1_1_DDI_BASE_FUNCTIONSまたはDXGI_DDI_BASE_FUNCTIONS構造体へのポインターを受け取るかどうかを判断できます。 DXGI1_1_DDI_BASE_FUNCTIONS構造体には、ドライバーが ResolveSharedResourceDXGI 関数へのポインターを入力できる pfnResolveSharedResource メンバーが含まれています。 IS_DXGI1_1_BASE_FUNCTIONSが TRUE を返す場合、ドライバーは、D3D10DDIARG_CREATEDEVICE構造体の DXGIBaseDDI メンバーが指定するDXGI_DDI_BASE_ARGS構造体の pDXGIDDIBaseFunctions メンバー内のDXGI1_1_DDI_BASE_FUNCTIONS構造体へのポインターを受け取ることを想定しています。 それ以外の場合、IS_DXGI1_1_BASE_FUNCTIONSが FALSE を返す場合、ドライバーはDXGI_DDI_BASE_FUNCTIONS構造体へのポインターを受け取ることを想定します。 Windows 7 には、より新しいバージョンのドライバーが古いバージョンのランタイムで動作できるようにするためのIS_DXGI1_1_BASE_FUNCTIONS マクロが用意されています。 ドライバーは、DXGI1_1_DDI_BASE_FUNCTIONSの pfnResolveSharedResource メンバーに ResolveSharedResourceDXGI 関数へのポインターを入力しようとすると、メモリが破損するかどうかを判断できます。

pResourceData

ディスプレイ デバイスのパラメーターと、ディスプレイ デバイスに関連付けられているサーフェスを指定する DXGI_DDI_ARG_RESOLVESHAREDRESOURCE構造体への ポインター。

注釈

Windows 7 では、IS_DXGI1_1_BASE_FUNCTIONS マクロ (D3D10umddi.h ヘッダー ファイルで定義されています) を使用して、ユーザー モードのディスプレイ ドライバーが CreateDevice(D3D10) 関数の呼び出しでDXGI1_1_DDI_BASE_FUNCTIONSまたはDXGI_DDI_BASE_FUNCTIONS構造体へのポインターを受け取るかどうかを判断できます。 DXGI1_1_DDI_BASE_FUNCTIONS構造体には、ドライバーが ResolveSharedResourceDXGI 関数へのポインターを入力できる pfnResolveSharedResource メンバーが含まれています。 IS_DXGI1_1_BASE_FUNCTIONSが TRUE を返す場合、ドライバーは、D3D10DDIARG_CREATEDEVICE構造体の DXGIBaseDDI メンバーが指定するDXGI_DDI_BASE_ARGS構造体の pDXGIDDIBaseFunctions メンバー内のDXGI1_1_DDI_BASE_FUNCTIONS構造体へのポインターを受け取ることを想定しています。 それ以外の場合、IS_DXGI1_1_BASE_FUNCTIONSが FALSE を返す場合、ドライバーはDXGI_DDI_BASE_FUNCTIONS構造体へのポインターを受け取ることを想定します。 Windows 7 には、より新しいバージョンのドライバーが古いバージョンのランタイムで動作できるようにするためのIS_DXGI1_1_BASE_FUNCTIONS マクロが用意されています。 ドライバーは、DXGI1_1_DDI_BASE_FUNCTIONS の pfnResolveSharedResource メンバーに ResolveSharedResourceDXGI 関数へのポインターを入力しようとすると、メモリが破損するかどうかを判断できます。

要件

要件
サポートされている最小のクライアント DXGI1_1_DDI_BASE_FUNCTIONSは、Windows 7 オペレーティング システム以降でサポートされています。
Header dxgiddi.h (D3d10umddi.h を含む)

こちらもご覧ください

BltDXGI

CreateDevice(D3D10)

D3D10DDIARG_CREATEDEVICE

DXGI_DDI_BASE_ARGS

DXGI_DDI_BASE_FUNCTIONS

GetGammaCapsDXGI

PresentDXGI

QueryResourceResidencyDXGI

ResolveSharedResource

ResolveSharedResourceDXGI

RotateResourceIdentitiesDXGI

SetDisplayModeDXGI

SetResourcePriorityDXGI