パスに依存しないローテーションのサポートSupporting Path-Independent Rotation

Windows 8.1 更新プログラム以降、オペレーティングシステムでは、縦方向の表示の複製がサポートされており、最も多くの解像度が表示されます。Starting with Windows 8.1 Update, the operating system supports cloning portrait-first displays on landscape-first displays with the greatest possible resolution. 表示ミニポートドライバーでは、 D3DKMDT_VIDPN_存在_パス__ローテーションの適切なオフセット値を設定する必要があります。これは、プライマリ複製パスセカンダリ複製パスのサポート構造で、次のようになります。「ディスプレイミニポートドライバーでの回転のサポート」で説明されています。The display miniport driver must set the proper offset values in the D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORT structure for the primary clone path and secondary clone path, as described in Supporting Rotation in a Display Miniport Driver.

これらのデバイスドライバーインターフェイス (DDIs) は Windows 8.1 更新プログラムで新しく追加されたものです。These Device driver interfaces (DDIs) are new in Windows 8.1 Update:

  • D3DKMDT_VPPR_GET_CONTENT_ROTATIOND3DKMDT_VPPR_GET_CONTENT_ROTATION
  • D3DKMDT_VPPR_GET_CONTENT_ROTATION_PARTD3DKMDT_VPPR_GET_CONTENT_ROTATION_PART
  • D3DKMDT_VPPR_GET_OFFSET_ROTATIOND3DKMDT_VPPR_GET_OFFSET_ROTATION

これらの DDIs は Windows 8.1 Update で更新されます。These DDIs are updated in Windows 8.1 Update:

縦優先デバイスの複製Cloning a portrait-first device

縦優先のデバイスのドライバーが横向きのモニターに複製するように要求された場合、プライマリ複製パスの解像度に一致するソースモード (xy) の解像度をレポートする必要があります。When a driver of a portrait-first device is requested to clone to a landscape-first monitor, it should report source-mode (x,y) resolutions that match the resolutions in the primary clone path. 次に、セカンダリ複製パスで90と270度のオフセット値 (D3DKMDT_VIDPN__パス_ローテーション_サポートをサポートします。Offset90または。Offset270TRUE)。The secondary clone path could then support 90- and 270-degree offset values (D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORT.Offset90 or .Offset270 are TRUE). そのため、 D3DKMDT_vidpn_使用して、_パス_ローテーション列挙値が90または270°のオフセットを示すように vidpn をコミットすると、(x,y) の解像度が反転されます。特定のパス。So when a VidPN is committed with an D3DKMDT_VIDPN_PRESENT_PATH_ROTATION enumeration value that indicates a 90- or 270-degree offset, this means that the (x,y) resolutions are flipped in this particular path.

既定では、オペレーティングシステムは、内部表示パネルとしてセカンダリ複製パスを選択します。By default the operating system chooses the secondary clone path to be the internal display panel. 内部パネルが縦優先の場合、オペレーティングシステムでは、 D3DKMDT_VIDPN__パス_ローテーション_サポートが必要です。Offset270は、横モードで内部表示パネルに表示するために、このパスに設定されます。In the case that the internal panel is portrait-first, the operating system expects D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORT.Offset270 to be set on this path in order to display on the internal display panel in landscape mode. セカンダリ複製パスに横向きの外部モニターがある場合、オペレーティングシステムは、 _パス_ローテーション_サポートするために、ドライバーが D3DKMDT_VIDPN_サポートすることを前提としています。Offset90ですが、これはまれなシナリオである可能性があります。In the case of a landscape-first external monitor in the secondary clone path, the operating system expects the driver to support D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORT.Offset90, although this is likely to be a rare scenario.

複製のシナリオ例Example clone scenarios

ここでは、ネイティブの解像度が 800 (幅) x 1280 ピクセル (高さ) の縦向きのデバイスが複製モードで、高さが1080ピクセルの横向き (横向き) のテレビに接続されている一般的なシナリオを示します。Here's a typical scenario where a portrait-first device with native resolution 800 (width) x 1280 pixels (height) is connected in clone mode to a landscape-first TV with height 1080 pixels. この情報は、ドライバーによってオペレーティングシステムに報告されます。The driver would report this info to the operating system:

ソースモードsource mode
1280 x 8001280 x 800

TV ターゲットモードTV target mode
1920 x 1080 (縦横比で保持されるスケーリング)1920 x 1080 (aspect-ratio preserved scaling)

デバイスターゲットモードdevice target mode
800 x 1280 (id のスケーリング)800 x 1280 (identity scaling)

プライマリ複製パス (テレビ)primary clone path (TV)
ドライバーでサポートされているのは、 D3DKMDT_VIDPN_存在_パス_ローテーション_サポートのみです。Offset0、および通常のローテーションサポートdriver supports only D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORT.Offset0, as well as normal rotation support

セカンダリ複製パス (デバイス)secondary clone path (device)
ドライバーでサポートされているのは、 D3DKMDT_VIDPN_存在_パス_ローテーション_サポートのみです。Offset270、および通常のローテーションサポートdriver supports only D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORT.Offset270, as well as normal rotation support

次に、 DxgkDdiCommitVidPn関数への呼び出しによって、 D3DKMDT_VIDPN_存在_パス_ローテーション列挙型のパス設定と共にが返されます。The call to the DxgkDdiCommitVidPn function then returns with these path settings from the D3DKMDT_VIDPN_PRESENT_PATH_ROTATION enumeration:

プライマリ複製パス (テレビ)primary clone path (TV)
D3DKMDT_VPPR_IDD3DKMDT_VPPR_IDENTITY

セカンダリ複製パス (デバイス)secondary clone path (device)
D3DKMDT_VPPR_ID_OFFSET270D3DKMDT_VPPR_IDENTITY_OFFSET270

オペレーティングシステムは、指定されたコンテンツを270度回転させるようにドライバーに要求します。The operating system expects the driver to rotate the provided content 270 degrees.

コントロールパネルの [画面向き] ドロップダウンボックスで [横] (反転) オプションを選択した場合、 DxgkDdiCommitVidPn関数の呼び出しは、D3DKMDT からのこれらのパス設定と共に返され _VIDPN__パス_ローテーション列挙体が存在します。If, in the Display control panel's Orientation drop-down box, the user chooses the Landscape (flipped) option, the call to the DxgkDdiCommitVidPn function returns with these path settings from the D3DKMDT_VIDPN_PRESENT_PATH_ROTATION enumeration:

プライマリ複製パス (テレビ)primary clone path (TV)
D3DKMDT_VPPR_ROTATE180D3DKMDT_VPPR_ROTATE180

セカンダリ複製パス (デバイス)secondary clone path (device)
D3DKMDT_VPPR_ROTATE180_OFFSET270D3DKMDT_VPPR_ROTATE180_OFFSET270

デスクトップウィンドウマネージャー (DWM) で既にコンテンツ180°がローテーションされている場合でも、ドライバーはセカンダリ複製パスで別の270度回転する必要があります。If the Desktop Window Manager (DWM) has already rotated the content 180 degrees, the driver must still rotate it another 270 degrees in the secondary clone path. それ以外の場合、ドライバーは、デバイスの TV と90度のコンテンツを180°回転させる必要があります。Otherwise, the driver must rotate the content 180 degrees for the TV and 90 degrees for the device. コンテンツを回転させるには、ドライバーでDXGK_のフラグ構造体の回転メンバーを設定する必要があることに注意してください。Note that to rotate the content, the driver must set the Rotate member of the DXGK_PRESENTFLAGS structure.