Cofunctional VidPN ソースおよびターゲット モードの列挙
このトピックでは、ビデオ の現在のネットワーク (VidPN) マネージャーとディスプレイ ミニポート ドライバーがビデオの現在のソースとターゲットで使用できるモードを列挙するために共同作業する方法について説明します。 この資料を読む前に、次のトピックの資料をよく理解しておく必要があります。
VidPN マネージャーは、ディスプレイ アダプターのビデオの現在のソースとターゲットで使用可能なモードを列挙するディスプレイ ミニポート ドライバーを要求します。 通常、要求には次のパターンがあります。
VidPN マネージャーは、ソースとターゲットの一部 (すべてではなく) にピン留めされたモードを持つ VidPN を作成または取得します。
VidPN マネージャーは DxgkDdiIsSupportedVidPn を 呼び出して、VidPN を拡張して、ディスプレイ アダプターでサポートされている機能 VidPN を形成できるかどうかを判断します。 つまり、既存の固定モードを変更せずに、残りのソースとターゲットにモードをピン留めできるかどうかを確認します。
VidPN マネージャーは DxgkDdiEnumVidPnCofuncModality を呼び出して、固定モードがまだないソースとターゲットで使用可能なモードを取得します。
DxgkDdiEnumVidPnCofuncModality に渡される引数の 1 つは、制約 VidPN と呼ばれる VidPN オブジェクトへのハンドルです。
DxgkDdiEnumVidPnCofuncModality では、次の操作を行う必要があります。
制約付き VidPN を調べます。
固定モードを持たないソースとターゲットごとに、モード セットを調整して、制約と共に機能する最大のモード セットになるようにします。
固定されたスケーリング変換がないパスごとに、スケーリング サポート フラグを調整して、制約と共に機能するようにします。
固定された回転変換がないパスごとに、回転サポート フラグを調整して、制約と共に機能するようにします。
固定モードのソースごとに、そのソースで使用できるマルチサンプリング メソッドを報告します。
次の段落では、前の箇条書きの各タスクを実行する方法について詳しく説明します。
制約付き VidPN の検査
制約付き VidPN の次のプロパティは、 DxgkDdiEnumVidPnCofuncModality で受け入れなければならない制約です。
トポロジ (ソースとターゲット間の関連付けのセット)
固定モード
各パスのスケーリング、スケーリングのサポート、回転、および回転のサポート
各パスのターゲットカラーベース
各パスのターゲット色係数の動的範囲
各パスのコンテンツ タイプ (グラフィックスまたはビデオ)
各パスのガンマ ランプ
制約付き VidPN から制約を抽出するには、次の手順を実行します。
まず 、pfnGetTopology 関数を呼び出して、制約する VidPN のトポロジを表す VidPN トポロジ インターフェイス へのポインターを取得します。
pfnAcquireFirstPathInfo 関数と pfnAcquireNextPathInfo 関数を呼び出して、制約付き VidPN のトポロジ内の各パスに関する情報を取得します。 特定のパス (ソース ID、ターゲット ID、スケーリング変換、回転変換、ターゲットの色ベースなど) に関する情報は、 D3DKMDT_VIDPN_PRESENT_PATH 構造体に含まれています。
パスごとに、パスのソース ID を pfnAcquireSourceModeSet 関数に渡して、パスのソースを取得します。
pfnAcquirePinnedModeInfo 関数を呼び出して、ソースのモード セットにピン留めされているモード (存在する場合) を判断します。 ソースのモード セットに固定モードがある場合は、おそらくセット内の残りのモードを調べる必要はありません。 モード セットに固定モードがない場合は、 pfnAcquireFirstModeInfo と pfnAcquireNextModeInfo を呼び出して、セット内の残りのモード を調べます。
ターゲット モード セットを調べ、ピン留めモードを持つターゲット モード セットを確認するには、同様の手順を使用します。
モード セットの調整
制約付き VidPN のトポロジのソースとターゲットに関連付けられているモード セットを調べる際に、ピン留めモードを持つモード セットをメモしておきます。 モード セットに固定モードがない場合は、調整する必要があるかどうかを判断します。 モード セットには、制約と共に機能しないモードが含まれている場合、または制約と共に機能する使用可能なモードがない場合は、調整する必要があります。
モニターが接続されているビデオ表示ターゲットの場合は、モニターでサポートされるモードのセットも考慮する必要があります。 ディスプレイ アダプター上のビデオ存在ターゲットが特定のモード (制約がある場合) をサポートしている場合でも、接続されているモニターもモードをサポートしている場合は、ターゲットのモード セットでそのモードのみを一覧表示する必要があります。 接続されたモニターでサポートされているモードを確認するには、次の手順を実行します。
-
pfnAcquireMonitorSourceModeSet を呼び出します。 モード セットに調整が必要ない場合は、そのままにしておくことができます。 モード セットを調整する必要がある場合は、新しいモード セットを作成し、既存のモード セットを新しいモード セットに置き換える必要があります。
-
新しいソース モード セットを作成して設定するには、 pfnCreateNewSourceModeSet を呼び出します。
_DXGK_VIDPNSOURCEMODESET_INTERFACE
次 に、pfnCreateNewModeInfo と pfnAddMode を呼び出します。
-
最後に pfnAssignSourceModeSet を呼び出して、既存のソース モード セットを新しいものに置き換えます。
スケーリングサポートフラグの調整
制約付き VidPN のトポロジ内の各パスについて、パスに固定スケーリング変換があるかどうかを判断します。 その決定を行うには、 vpnPath を調べます。ContentTransformation.Scaling。 ここで、vpnPath はパスを表す D3DKMDT_VIDPN_PRESENT_PATH 構造体です。 vpnPath の場合。ContentTransformation.Scaling がD3DKMDT_VPPS_IDENTITY、D3DKMDT_VPPS_CENTERED、またはD3DKMDT_VPPS_STRETCHEDに設定されている場合、パスのスケーリング変換は固定されます。 それ以外の場合、スケーリング変換は固定されません。
パスに固定スケーリング変換がない場合は、パスのスケーリング サポート フラグを調整する必要があるかどうかを判断します。 サポート フラグは、制約と共機能ではないスケーリングの種類のサポートを示す場合、または制約と共に機能するスケーリングの種類のサポートを表示できない場合は、調整する必要があります。 スケーリング サポート フラグを変更するには、フラグを保持する D3DKMDT_VIDPN_PRESENT_PATH_SCALING_SUPPORT 構造体のメンバーを設定します。
回転サポート フラグの調整
パスの回転サポート フラグの調整は、パスのスケーリング サポート フラグの調整と似ています。 vpnPath がD3DKMDT_VIDPN_PRESENT_PATH構造であるとします。 vpnPath の場合。ContentTransformation.Rotation がD3DKMDT_VPPR_IDENTITY、D3DKMDT_VPPR_ROTATE90、D3DKMDT_VPPR_ROTATE180、またはD3DKMDT_VPPR_ROTATE270に設定されている場合、パスの回転変換は固定されます。 それ以外の場合、回転変換は固定されません。 ローテーション サポート フラグは vpnPath にあります。ContentTransformation.RotationSupport。
マルチサンプリング メソッドのレポート
ディスプレイ アダプターに、マルチサンプリングによるアンチエイリアシングが可能な 1 つ以上のビデオ出力コーデックがある場合は、固定モードを持つソースごとに使用可能なマルチサンプリング メソッド (制約あり) を報告する必要があります。 使用可能なマルチサンプリング メソッドを報告するには、次の手順を実行します。
- D3DDDI_MULTISAMPLINGMETHOD構造体の配列を作成する
- 配列を VidPN インターフェイスの pfnAssignMultisamplingMethodSet 関数に渡します。
D3DDDI_MULTISAMPLINGMETHOD構造体には、マルチサンプリング メソッドを特徴付ける 2 つのメンバーを設定する必要があります。 NumSamples メンバーは、サンプリングされるサブピクセルの数を示します。 NumQualityLevels メンバーは、メソッドが動作できる品質レベルの数を示します。 レベルの増加によって表示されるイメージの品質が顕著に向上する限り、任意の数の品質レベルを指定できます。
列挙ピボット
前述のように、 DxgkDdiEnumVidPnCofuncModality では、 hConstrainingVidPn パラメーターで渡された VidPN と共に機能するモード セットを作成する必要があります。 場合によっては、 DxgkDdiEnumVidPnCofuncModality は EnumPivotType パラメーターと EnumPivot パラメーターで渡された追加情報 (列挙ピボット) に従って動作を拡張する必要があります。
列挙ピボットには、次のいずれかを指定できます。
特定のビデオ 存在ソースのモード セット
特定のビデオ存在ターゲットのモード セット
特定の VidPN 存在パスのスケーリング変換
特定の VidPN 存在パスの回転変換
列挙ピボットがモード セットの場合、 DxgkDdkEnumVidPnCofuncModality は、そのモードを変更せずに残す必要があります。 列挙ピボットがパスのスケーリング (回転) 変換である場合、 DxgkDdiEnumVidPnCofuncModality は、そのパスのスケーリング (回転) サポート フラグを変更しないでください。
フィードバック
https://aka.ms/ContentUserFeedback。
近日公開予定: 2024 年を通じて、コンテンツのフィードバック メカニズムとして GitHub イシューを段階的に廃止し、新しいフィードバック システムに置き換えます。 詳細については、以下を参照してください:フィードバックの送信と表示