ディスプレイ ミニポート ドライバーでの回転のサポート

ディスプレイ ミニポート ドライバーの DxgkDdiEnumVidPnCofuncModality 関数は、pfnUpdatePathSupportInfo 関数を呼び出して、ビデオ 存在ネットワーク (VidPN) トポロジ内の各パスの回転サポートを報告します。 回転のサポートのレポートの詳細については、「同時機能 VidPN ソース モードとターゲット モードの列挙」をご参照ください。

Microsoft DirectX グラフィックス カーネル サブシステムは、回転しないサーフェス寸法を使用して共有プライマリ サーフェスを作成します。 ディスプレイ ミニポート ドライバーにサーフェスの回転を通知するには、DirectX グラフィックス カーネル サブシステムは、ディスプレイ ミニポート ドライバーのDxgkDdiCommitVidPn 関数と DxgkDdiUpdateActiveVidPnPresentPath 関数の呼び出しの D3DKMDT_VIDPN_PRESENT_PATH構造体の ContentTransformation メンバーに指定されているD3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION 構造体の回転メンバーに、D3DKMDT_VIDPN_PRESENT_PATH_ROTATION型の値を指定します。

: すべての回転角度は、GDI が回転を定義する方法と一致する反時計回りの方向に定義されます。

DirectX サブシステムがディスプレイ ミニポート ドライバーにサーフェスを回転するように通知する場合、ドライバーは、pPresent パラメーターがドライバーの DxgkDdiPresent 関数の呼び出しで指すDXGKARG_PRESENT 構造体の Flags メンバーで、回転ビット フィールド フラグが設定されている場合にのみ、サーフェス データを回転する必要があります。 プレゼンテーション データから画面の現在の向きが回転し、回転が設定されていないとドライバーが判断した場合でも、ドライバーはデータを回転させるべきではありません。

複製モードの動作

複製モード は、ビデオプレゼンテーションソースがビデオプレゼンテーションネットワーク内の複数のパスを介して複数のビデオプレゼンテーションターゲットに接続するモードです。 (ビデオの存在ネットワークの詳細については、複数のモニターとビデオ プレゼンテーション ネットワーク をご参照ください。)

ディスプレイ ミニポート ドライバーは、各ターゲットが異なる回転を必要とする可能性があるため、複製モードで動作する場合、回転を異なる方法で処理します。 オペレーティング システム、さまざまなバージョンの Microsoft DirectX ランタイム、およびユーザー モード クライアントは、プライマリ ビデオの現在のターゲットの向きのみを検出します。 したがって、ビデオの現在のソース内のコンテンツは、常にプライマリ ビデオ の現在のターゲットの向きと一致します。

次の表は、関連するすべての状況の複製モードでのディスプレイ ミニポート ドライバーの動作を示しています。 回転フラグの設定は、DXGKARG_PRESENT 構造体の Flags メンバーの回転 ビット フィールドの設定です。

プライマリ ターゲット 第2ターゲット 回転フラグ ドライバーの動作

回転しない

回転しない

設定なし

ドライバーは回転を実行しません。

回転しない

回転

設定なし

回転フラグが設定されていない場合でも、ドライバーはセカンダリ ターゲットを 回転 します。

回転

回転しない

Set

ドライバーはプライマリ ターゲットをローテーションしますが、セカンダリ ターゲットは回転しません。

回転

回転しない

設定なし

回転が設定されていないため、ドライバーはプライマリ ターゲットを回転しません。 セカンダリ ターゲットがソース内のコンテンツの向きと一致しないため、ドライバーはセカンダリ ターゲットを回転させる必要があります。

この状況は、クライアントがローテーションに対応していて、ソースのコンテンツが既に適切に配置されている場合に発生します。 したがって、オペレーティング システムは 回転 を設定しません。

回転

回転

Set

ドライバーは、プライマリ ターゲットとセカンダリ ターゲットの両方をローテーションします。

回転

回転

設定なし

ローテーション対応クライアントは、ソースのコンテンツを既に適切に配置しています。 そのため、追加の回転は必要ありません。

Windows 8.1 Update 以降の複製モードの要件

Windows 8.1 Update 以降では、ドライバーはこれらの要件を満たす必要があります。 テスト署名が有効になっている場合、ドライバーがこれらの要件を満たさなければ、システム バグチェックが発生します。

プライマリ 複製パス
定義: ソース ディスプレイを複製するターゲット モニター (ラップトップ コンピューター上のディスプレイを複製する外部モニターなど) を含むパス。

要件: プライマリ クローン パスでは、ドライバーは Offset0TRUE に設定し、D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORTの他の 3 つのオフセット値を FALSEに設定する必要があります。

縦長の最初のソース表示の場合、プライマリ クローン パスは回転オフセットされません。 つまり、プライマリ 複製パスのオフセットは常に 0 (D3DKMDT_VIDPN_PRE Standard Edition NT_PATH_ROTATION_SUPPORTOffset0TRUE で、デスクトップ ウィンドウ マネージャー (DWM) は、適切な向きに合わせてコンテンツを事前に回転させます。

プライマリ クローン パスは、すべてのプライマリおよびセカンダリ クローン ターゲットのモニターリフレッシュレートを決定します。

セカンダリ 複製パス
定義: ソースの表示も複製する、プライマリ 複製パスの一部ではなく、追加のターゲット モニターを含むパス。

要件: セカンダリ 複製パスでは、ドライバーは、D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORTの 4 つのオフセット値のうち少なくとも 1 つを TRUE に設定する必要があります。 ドライバーがパスに依存しない回転をサポートしていない場合は、すべてのセカンダリ 複製パスで Offset0TRUE に設定する必要があります。

パスに依存しない回転をサポートする場合にドライバーが行う必要がある設定の 2 つの例を次に示します。

横向きの最初の例
ソースディスプレイとセカンダリクローンパスのターゲットが両方とも横向き優先モニターの場合、セカンダリクローンパスではドライバはD3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORTOFFSET0TRUE、D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORT のその他の 3 つのオフセット値を FALSE に設定します。 または、この場合、セカンダリ 複製パスでは、ドライバーは Offset0Offset180 の両方を TRUE に設定し、他のオフセット値を FALSE に設定します。

縦優先の例
ソースディスプレイが縦向き優先デバイスで、横向き優先の外部モニターに接続する場合、セカンダリクローンパスでは、ドライバーは Offset270 または Offset90TRUE に設定します。

詳細については、「パスに依存しない回転のサポート」をご参照ください。