次の方法で共有


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 関数が呼び出された場合にのみ、ハードウェアをスキャンするようにプログラムする必要があります。 そのため、ランタイムは、hResourceSubResourceIndex、ドライバーの CreateResourceD3D10 関数の呼び出しによって作成されたプライマリに、pDisplayModeData パラメーターによって指される DXGI_DDI_ARG_SETDISPLAYMODE 構造体のメンバーを設定します。 その後、ドライバーは、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_FUNCTIONSpfnResolveSharedResource メンバーに 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_FUNCTIONSpfnResolveSharedResource メンバーに ResolveSharedResourceDXGI 関数へのポインターを入力しようとすると、メモリが破損するかどうかを判断できます。

必要条件

要件 価値
サポートされる最小クライアント DXGI1_1_DDI_BASE_FUNCTIONSは、Windows 7 オペレーティング システム以降でサポートされています。
ヘッダー 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