次の方法で共有


DXGI1_2_DDI_BASE_FUNCTIONS 構造体 (dxgiddi.h)

Windows ディスプレイ ドライバー モデル (WDDM) 1.2 以降のユーザー モード ディスプレイ ドライバーが実装できる関数へのポインターが含まれており、出力にレンダリングされたフレームの表示、ガンマの制御、共有および Windows グラフィックス デバイス インターフェイス (GDI) 相互運用可能なサーフェスに関する通知の取得、全画面表示の移行の管理など、低レベルのタスクを実行できます。

構文

typedef struct DXGI1_2_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;
  HRESULT()(DXGI_DDI_ARG_BLT1 *) * pfnBlt1;
  HRESULT()(DXGI_DDI_ARG_OFFERRESOURCES *) * pfnOfferResources;
  HRESULT()(DXGI_DDI_ARG_RECLAIMRESOURCES *) * pfnReclaimResources;
  HRESULT()(DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS *) * pfnGetMultiplaneOverlayCaps;
  HRESULT()(void *) * pfnGetMultiplaneOverlayFilterRange;
  HRESULT()(DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT *) * pfnCheckMultiplaneOverlaySupport;
  HRESULT()(DXGI_DDI_ARG_PRESENTMULTIPLANEOVERLAY *) * pfnPresentMultiplaneOverlay;
} DXGI1_2_DDI_BASE_FUNCTIONS;

メンバー

pfnPresent

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

pfnGetGammaCaps

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

pfnSetDisplayMode

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

pfnSetResourcePriority

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

pfnQueryResourceResidency

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

pfnRotateResourceIdentities

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

pfnBlt

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

Direct3D ランタイムは、pBltData パラメーターが指すDXGI_DDI_ARG_BLT構造体の Flags メンバーを、複数サンプリングされたリソースを解決し、色形式変換を実行し、一度にストレッチまたは縮小を実行するビット ブロック転送 (bitblt) 操作を実行するように Blt1DXGI 関数を要求するように設定できます。 ただし、Direct3D ランタイムは、DXGI_DDI_ARG_BLT1 のFlags メンバーをゼロ (つまりフラグが設定されていません) に設定し、DXGI_DDI_ARG_BLT1の Rotate メンバー (つまり、回転がないことを示す) で設定されたDXGI_DDI_MODE_ROTATION_IDENTITYと共に、メモリの直接コピー操作を実行することはありません。 代わりに、両方のリソースがマルチサンプリングされない限り、Direct3D ランタイムはドライバーの ResourceCopy または ResourceCopyRegion(D3D11_1) 関数を呼び出して、メモリの直接コピー操作を実行します。

ユーザー モードのディスプレイ ドライバーが実行するストレッチまたは圧縮の品質は、二次フィルターが実行するストレッチまたは縮小と同じくらい適切である必要があります。

Direct3D ランタイムは、ドライバーの Blt1DXGI 関数を呼び出す頻度が低くなります。 つまり、ランタイムは主にプレゼンテーションをサポートするために Blt1DXGI を 使用するため、ランタイムはフレームあたり 1 回または 2 回だけ Blt1DXGI を 呼び出す必要があります。

ランタイムがプレゼンテーションに対して Blt1DXGI を呼び出すと、ランタイムは DXGI_DDI_ARG_BLT1 の Flags メンバーに Present bit-field フラグ設定します。 ランタイムは、ビットblt の追加の要件があり、追加の同期が必要になる可能性があることをドライバーに通知する [ビット フィールドの 表示 ] フラグを設定します (たとえば、ランタイムは、ディスプレイの個別の部分を処理する 2 つのグラフィックス アダプターを含むコンピューター構成で追加の同期を実行する必要がある場合があります)。 [ビット フィールドの表示] フラグが設定されている場合、ドライバーは、アプリケーションのバック バッファーから DWM の共有サーフェイスへのコピー操作を実行する必要があります。 この種類のコピー操作の同期は不正確であるため、成果物の破棄は、ユーザーが経験する最悪の種類の成果物である必要があります。 この種類のコピー操作では、可能性のあるアーティファクトがはるかに悪くなるため、ドライバーは最初に変換先のサーフェスに解決してから、結果をインプレースで色変換することで、マルチパス アプローチを使用しないでください。

ドライバーがプライマリ サーフェスの作成時にDXGI_DDI_ERR_UNSUPPORTEDを返す (つまり、CreateResource(D3D10) 関数の呼び出しから DXGI_DDI_ERR_UNSUPPORTEDを返す) 場合、D3D10DDIARG_CREATERESOURCE の BindFlags メンバーに D3D10_DDI_BIND_PRESENT フラグを設定し、D3D10DDIARG_CREATERESOURCEpPrimaryDesc メンバーと共に設定します。が NULL 以外に設定されている場合)、ドライバーはコピー操作中のローテーションもサポートする必要があります。 ドライバーが CreateResource(D3D10) または CreateResource(D3D11) 関数の呼び出しからDXGI_DDI_ERR_UNSUPPORTEDを返さない場合、ランタイムは DXGI_DDI_MODE_ROTATION_ROTATE90DXGI_DDI_MODE_ROTATION_ROTATE180、または DXGI_DDI_MODE_ROTATION_ROTATE270 値を DXGI_DDI_ARG_BLT1Rotate メンバーに渡すことはありません。 そのため、このような状況では、ドライバーの Blt1DXGI 関数は回転をサポートする必要はありません。

ランタイムは、 DXGI_DDI_ARG_BLT1Rotate メンバーの値を設定して、ドライバーがコンテンツをコピー先にコピーする前に、ソースの内容を反時計回りに回転させる度数を示します。 回転は 90 度単位で指定します。

注意

ドライバーの Blt1DXGI 関数がソースサーフェイスから sRGB 形式のコンテンツを非 sRGB 変換先サーフェスにコピーする場合、ドライバーは sRGB コンテンツを変更せずにコピーする必要があります (つまり、ドライバーは sRGB から線形変換を実行しないでください)。

ソースの制限

Blt1DXGI 関数は、常にソース サブリソース全体 (一部のサブ四角形領域に対して) を使用してビットblt 操作を実行します。 さらに、ソースはD3D10DDIRESOURCE_TEXTURE2D表現です (ユーザー モードディスプレイ ドライバーのCreateResource(D3D10) または CreateResource(D3D11) 関数の呼び出しでソースが作成されたときに、D3D10DDIARG_CREATERESOURCEまたはD3D11DDIARG_CREATERESOURCEの ResourceDimension メンバーで指定されます)。 ランタイムが DXGI_DDI_ARG_BLT1Flags メンバーに Resolve ビットフィールドを設定すると、ソースはマルチサンプリング リソースになります。 ソース リソースは、D3D10DDIARG_CREATERESOURCEまたはD3D11DDIARG_CREATERESOURCEBindFlags メンバーでD3D10_DDI_BIND_PRESENT フラグが設定されたリソースに制限されます。 ソースの形式 (D3D10DDIARG_CREATERESOURCE または D3D11DDIARG_CREATERESOURCEFormat メンバーで指定) は、DXGI_FORMAT列挙の次の値によって指定される表示モード形式に制限されます。

  • DXGI_FORMAT_B5G6R5_UNORM
  • DXGI_FORMAT_B5G5R5A1_UNORM
  • DXGI_FORMAT_B8G8R8A8_UNORM (下記の注を参照)。
  • DXGI_FORMAT_B8G8R8X8_UNORM
  • DXGI_FORMAT_R16G16B16A16_FLOAT
  • DXGI_FORMAT_R10G10B10A2_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM
  • DXGI_FORMAT_R8G8B8A8_UNORM_SRGB

注意

ドライバーがソース形式 のDXGI_FORMAT_B8G8R8A8_UNORMをサポートしている場合は、次の制限が適用されます。

  • ドライバーは、浮動小数点形式からBGRA8888などの整数形式にビットblt 操作を実行する場合、結果にガンマを暗黙的にエンコードする必要があります。
  • 逆に、ドライバーが整数形式から浮動小数点形式へのビットブル演算を実行する場合、結果からガンマ エンコードを暗黙的に削除する必要があります。

宛先の制限

変換先は 、D3D10DDIRESOURCE_TEXTURE2D 表現でもあります。 変換先の形式も、表示モード形式に制限されます。 ターゲット リソースは、レンダー ターゲットとしてバインドされているリソースに制限されます (D3D10DDIARG_CREATERESOURCEまたはD3D11DDIARG_CREATERESOURCEBindFlags メンバーに設定D3D10_DDI_BIND_RENDER_TARGET)。

ステレオ バック バッファーの作成

Windows 8以降、ドライバーがステレオ バック バッファーを作成する必要がある場合は、CreateResource(D3D10) 関数または CreateResource(D3D11) 関数の pCreateResource パラメーターが指すD3D10DDIARG_CREATERESOURCEまたは D3D11DDIARG_CREATERESOURCE 構造体のメンバーをそれぞれ設定する必要があります。

  1. ArraySize メンバーを 2 の値に設定します。
  2. BindFlags メンバーにD3D10_DDI_BIND_PRESENT フラグ値を設定します。

さらに、ステレオ表示をサポートするには、BltDXGI 関数は、ソースリソースと変換先リソースの範囲内にあるDXGI_DDI_ARG_BLT構造の DstSubresource メンバーと SrcSubresource メンバーの値を許可する必要があります。

pfnResolveSharedResource

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

pfnBlt1

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

pfnOfferResources

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

pfnReclaimResources

ユーザー モード ディスプレイ ドライバーが以前に再利用のために提供したビデオ メモリ リソースを再利用するために DXGI ランタイムによって呼び出されます。 WDDM 1.2 以降のユーザー モード ディスプレイ ドライバーによって実装されます。

pfnGetMultiplaneOverlayCaps

ユーザー モード ディスプレイ ドライバーが基本的なオーバーレイ プレーン機能を取得するように要求するために、Microsoft DirectX グラフィックス インフラストラクチャ (DXGI) ランタイムによって呼び出されます。 必要に応じて、Windows ディスプレイ ドライバー モデル (WDDM) 1.3 以降のユーザー モードディスプレイ ドライバーによって実装されます。 pfnGetMultiplaneOverlayCaps の構文は次のとおりです。

pfnGetMultiPlaneOverlayCaps GetMultiPlaneOverlayCaps;

HRESULT __stdcall* GetMultiPlaneOverlayCaps(
    DXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS *pCaps
)
{ ... }

pCaps パラメーターは、オーバーレイ プレーン機能を指定するDXGI_DDI_ARG_GETMULTIPLANEOVERLAYCAPS構造体へのポインターです。

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

  • S_OK: ドライバーはオーバーレイ プレーン機能を正常に提供しました。
  • D3DDDIERR_DEVICEREMOVED: ドライバーはディスプレイ アダプターが削除されたことが検出されたため、ドライバーは操作を完了しませんでした。 ドライバーがアダプターの削除を認識していない場合、ドライバーはこのエラー コードを返す必要はありません。

pfnGetMultiplaneOverlayFilterRange

このメンバーは予約済みであり、0 に設定する必要があります。 Windows 8.1 以降でサポートされます。

pfnCheckMultiplaneOverlaySupport

マルチプレーン オーバーレイのハードウェア サポートの詳細をチェックするために、Microsoft DirectX グラフィックス インフラストラクチャ (DXGI) ランタイムによって呼び出されます。 pfnCheckMultiplaneOverlaySupport の構文は次のとおりです。

PFND3DDDI_CHECKMULTIPLANEOVERLAYSUPPORT pfnCheckMultiplaneOverlaySupport;

HRESULT __stdcall* pfnCheckMultiplaneOverlaySupport(
   D3DDDIARG_CHECKMULTIPLANEOVERLAYSUPPORT *pSupport
)
{ ... }

pSupport パラメーターは、変換先サーフェスに表示する方法を説明するDXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT構造体へのポインターです。

pfnCheckMultiplaneOverlaySupport が成功すると、S_OKが返されます。 そうでない場合は、HRESULT エラー コードを返します。

pfnPresentMultiplaneOverlay

ドライバーの pfnPresentMultiplaneOverlay (DXGI) 関数へのポインター。 Windows 8.1 以降でサポートされます。

pSupport

変換先サーフェスに表示する方法を説明する DXGI_DDI_ARG_CHECKMULTIPLANEOVERLAYSUPPORT 構造体へのポインター。

要件

要件
サポートされている最小のクライアント Windows 8、WDDM 1.2
サポートされている最小のサーバー Windows Server 2012
Header dxgiddi.h (D3d10umddi.h を含む)

こちらもご覧ください

CreateDevice(D3D10)

D3D10DDIARG_CREATEDEVICE

DXGI1_3_DDI_BASE_FUNCTIONS

DXGI_DDI_BASE_ARGS

DXGI_DDI_BASE_FUNCTIONS