VidPN オブジェクトおよびインターフェイス
Video Present Network (VidPN) マネージャーは、VidPN オブジェクトを使用して、ビデオ表示ソース、ビデオ表示ターゲット、および表示モード間での関連付けに関する情報を保持します。 詳細については、トピック「Video Present Network の概要」を参照してください。
VidPN オブジェクト
VidPN オブジェクトには、以下のサブオブジェクトが含まれています。
トポロジ
ソース モード セット
ターゲット モード セット
モニター ソース モード セット
モニター周波数範囲セット
モニター記述子セット
Path
source
移行先
ソース モード
ターゲット モード
モニター ソース モード
次の図は、VidPN オブジェクトとそのサブオブジェクトを示しています。
上の図は、それぞれの関連付けが一対一、一対多、多対一、多対多のいずれであるかを示しています。 たとえば、1 つのソースは複数のパスに属すことができるが、1 つのターゲットは 1 つのパスにしか属せないことが図からわかります。
図の青いオブジェクトはハンドルとインターフェイスを介してアクセスされ、灰色のオブジェクトは構造体ポインターを介してアクセスされます。 この文脈におけるインターフェイスとは、関数ポインターを含む構造体のことです。 たとえば、DXGK_VIDPNTOPOLOGY_INTERFACE 構造体には、トポロジ オブジェクトの検査および変更のためにディスプレイ ミニポート ドライバーによって呼び出される関数 (VidPN マネージャーによって実装されます) へのポインターが含まれています。 ディスプレイ ミニポート ドライバーがこれらの関数のいずれかを呼び出すときには、トポロジ オブジェクトへのハンドルを渡す必要があります。 次の表に、VidPN オブジェクトとそのサブオブジェクトへのアクセスに使用されるハンドル、インターフェイス、ポインターのデータ型を示します。
Object | アクセス メソッドとデータ型 |
---|---|
VidPN (VidPN インターフェイス) | ハンドルとインターフェイスを介してアクセスされます。 D3DKMDT_HVIDPN、DXGK_VIDPN_INTERFACE |
トポロジ (VidPN トポロジ インターフェイス) | ハンドルとインターフェイスを介してアクセスされます。 D3DKMDT_HVIDPNTOPOLOGY、DXGK_VIDPNTOPOLOGY_INTERFACE |
ソース モード セット (VidPN ソース モード セット インターフェイス) | ハンドルとインターフェイスを介してアクセスされます。 D3DKMDT_HVIDPNSOURCEMODESET、DXGK_VIDPNSOURCEMODESET_INTERFACE |
ターゲット モード セット (VidPN ターゲット モード セット インターフェイス) | ハンドルとインターフェイスを介してアクセスされます。 D3DKMDT_HVIDPNTARGETMODESET、DXGK_VIDPNTARGETMODESET_INTERFACE |
モニター ソース モード セット | ハンドルとインターフェイスを介してアクセスされます。 D3DKMDT_HMONITORSOURCEMODESET、DXGK_MONITORSOURCEMODESET_INTERFACE |
Path | 構造体ポインターを介してアクセスされます。 D3DKMDT_VIDPN_PRESENT_PATH |
ソース | 構造体ポインターを介してアクセスされます。 D3DKMDT_VIDEO_PRESENT_SOURCE |
移行先 | 構造体ポインターを介してアクセスされます。 D3DKMDT_VIDEO_PRESENT_TARGET |
ソース モード | 構造体ポインターを介してアクセスされます。 D3DKMDT_VIDPN_SOURCE_MODE |
ターゲット モード | 構造体ポインターを介してアクセスされます。 D3DKMDT_VIDPN_TARGET_MODE |
モニター ソース モード | 構造体ポインターを介してアクセスされます。 D3DKMDT_MONITOR_SOURCE_MODE |
モニター周波数範囲セット | 構造体ポインターを介してアクセスされます。 [DXGK_MONITORFREQUENCYRANGESET_INTERFACE |
モニター記述子セット | 構造体ポインターを介してアクセスされます。 [DXGK_MONITORDESCRIPTORSET_INTERFACE |
VidPN マネージャー
VidPN マネージャーは、DirectX グラフィックス カーネル サブシステムのコンポーネントの 1 つであり、ディスプレイ ミニポート ドライバーと連携して VidPN を構築および維持します。 以下の手順では、ディスプレイ ミニポート ドライバーが VidPN オブジェクトへのハンドルおよびインターフェイスを取得する方法について説明します。
初期化中、DirectX グラフィックス カーネル サブシステムは、ディスプレイ ミニポート ドライバーの DxgkDdiStartDevice 関数を呼び出します。 この呼び出しにより、ディスプレイ ミニポート ドライバーに DXGKRNL_INTERFACE 構造体が渡されます。これには、DirectX グラフィックス カーネル サブシステムによって実装されている関数へのポインターが含まれています。 このような関数の 1 つに、DxgkCbQueryVidPnInterface があります。
VidPN マネージャーはいずれかの時点でディスプレイ ミニポート ドライバーの支援を必要とするため、次のいずれかの関数を呼び出すことによって、VidPN オブジェクトへのハンドルをディスプレイ ミニポート ドライバーに渡します。
ディスプレイ ミニポート ドライバーは、手順 2 で取得したハンドルを DxgkCbQueryVidPnInterface に渡し、これにより、DXGK_VIDPN_INTERFACE 構造体へのポインターが返されます。
ディスプレイ ミニポート ドライバーは、VidPN オブジェクトへのハンドルとインターフェイスを取得した後、プライマリ サブオブジェクト (トポロジ、ソース モード セット、ターゲット モード セット、およびモニター ソース モード セット) へのハンドルとインターフェイスを (必要に応じて) 取得できます。 たとえば、ディスプレイ ミニポート ドライバーは、pfnGetTopology (VidPN インターフェイスの関数の 1 つ) を呼び出して、VidPN トポロジ オブジェクトへのハンドルと、DXGK_VIDPNTOPOLOGY_INTERFACE 構造体へのポインターを取得できます。
以下の関数 (VidPN インターフェイス内) は、VidPN オブジェクトのプライマリ サブオブジェクトにハンドルとインターフェイスを渡します。
前のリストの関数のうちの 2 つには、VidPN サブオブジェクトの解放に対応する関数が含まれていることに注意してください。
ディスプレイ ミニポート ドライバーは、VidPN プライマリ サブオブジェクトのいずれかへのハンドルとインターフェイスを取得した後、インターフェイス関数を呼び出して、そのサブオブジェクトに関連するオブジェクトの記述子を取得できます。 たとえば、トポロジ オブジェクトへのハンドルとインターフェイスを取得したとすると、ディスプレイ ミニポート ドライバーは、次の手順を実行してトポロジ内のすべてのパスの記述子を取得できます。
-
VidPN トポロジ インターフェイスの pfnAcquireFirstPathInfo 関数を呼び出して、D3DKMDT_VIDPN_PRESENT_PATH 構造体へのポインターを取得します。この構造体にはトポロジ内の最初のパスが記述されています。
-
再び pfnAcquireNextPathInfo 関数を呼び出して、D3DKMDT_VIDPN_PRESENT_PATH 構造体へのポインターを取得します。この構造体には、トポロジ内の残りのパスが記述されています。
同様に、ディスプレイ ミニポート ドライバーは、以下のモード セット インターフェイスのいずれかの pfnAcquireFirstModeInfo 関数および pfnAcquireNextModeInfo 関数を呼び出して、モード セットのモードの記述子を取得できます。
DXGK_VIDPNSOURCEMODESET_INTERFACE インターフェイスには、ソース モード セットからモードを削除する関数は含まれていないので注意してください。 ディスプレイ ミニポート ドライバーがソース モード セットを更新する必要がある場合に、モードを追加および削除するという方法で既存のモード セットを変更することはありません。 そうではなく、新しいモード セットを作成して、古いモード セットを置き換えます。 モード セットを更新する必要がある関数の例として、ディスプレイ ミニポート ドライバーの DxgkDdiEnumVidPnCofuncModality 関数があります。 ソース モード セットの更新手順は次のとおりです。
DXGK_VIDPNSOURCEMODESET_INTERFACE インターフェイスの pfnCreateNewModeInfo を呼び出して、D3DKMDT_VIDPN_SOURCE_MODE 構造体 (VidPN マネージャーによって割り当てられます) へのポインターを取得します。
pfnAddMode を繰り返し呼び出して、ソース モード セットにモードを追加します。
DXGK_VIDPN_INTERFACE の pfnAssignSourceModeSet 関数を呼び出して、特定のビデオ表示ソースに新しいモード セットを割り当てます。 新しいソース モード セットにより、そのソースに現在割り当てられているソース モード セットが置き換えられます。
ターゲット モード セットの更新も、ソース モード セットの更新と同様に行われます。 DXGK_VIDPNTARGETMODESET_INTERFACE インターフェイスには以下の関数があります。
-
新しいターゲット モード セットを作成するための pfnCreateNewModeInfo 関数と、セットにモードを追加するための pfnAddMode 関数。
特定のパスに属するソースとターゲットを取得するためのインターフェイス (関数のセット) はありません。 ディスプレイ ミニポート ドライバーは、パスを表す D3DKMDT_VIDPN_PRESENT_PATH 構造体の VidPnSourceId および VidPnTargetId の各メンバーを検査することで、特定のパスに属するソースとターゲットを特定できます。
関連項目
VidPN がディスプレイ アダプターでサポートされているかどうかの確認