支持独立于路径的旋转

从Windows 8.1 更新开始,操作系统支持以尽可能高分辨率在横向优先显示器上克隆纵向优先显示器。 显示微型端口驱动程序必须在主克隆路径辅助克隆路径的D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORT结构中设置适当的偏移值,如支持显示微型端口驱动程序中的旋转中所述。

这些设备驱动程序接口 (DDI) 是Windows 8.1 更新中的新增功能:

  • D3DKMDT_VPPR_GET_CONTENT_ROTATION
  • D3DKMDT_VPPR_GET_CONTENT_ROTATION_PART
  • D3DKMDT_VPPR_GET_OFFSET_ROTATION

这些 DDI 在Windows 8.1 更新中更新:

克隆纵向优先设备

当请求纵向优先设备的驱动程序克隆到横向优先监视器时,它应报告源模式 (xy) 与主克隆路径中的分辨率匹配的分辨率。 然后,辅助克隆路径可以支持 90 度和 270 度的偏移值 (D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORTOffset90 或 。Offset270) 为 TRUE 。 因此,如果提交具有 D3DKMDT_VIDPN_PRESENT_PATH_ROTATION 枚举值(指示 90 度或 270 度偏移)的 VidPN,则表示在此特定路径中翻转 (xy) 分辨率。

默认情况下,操作系统选择辅助克隆路径为内部显示面板。 如果内部面板是纵向优先的,操作系统需要 D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORT。要在此路径上设置 Offset270 ,以便以横向模式显示在内部显示面板上。 对于辅助克隆路径中的横向优先外部监视器,操作系统需要驱动程序支持 D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORTOffset90,尽管这种情况可能很少见。

示例克隆方案

下面是一个典型方案,即本机分辨率为 800 (宽度) x 1280 像素 (高度) 的纵向优先设备在克隆模式下连接到高度为 1080 像素的横向优先电视。 驱动程序会向操作系统报告此信息:

源模式
1280 x 800

电视目标模式
1920 x 1080 (保留纵横比缩放)

设备目标模式
800 x 1280 (标识缩放)

电视) (主克隆路径
驱动程序仅支持 D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORTOffset0 以及正常旋转支持

辅助克隆路径 (设备)
驱动程序仅支持 D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORTOffset270 以及正常旋转支持

然后,对 DxgkDdiCommitVidPn 函数的调用会从 D3DKMDT_VIDPN_PRESENT_PATH_ROTATION 枚举返回这些路径设置:

电视) (主克隆路径
D3DKMDT_VPPR_IDENTITY

辅助克隆路径 (设备)
D3DKMDT_VPPR_IDENTITY_OFFSET270

操作系统要求驱动程序将提供的内容旋转 270 度。

如果用户在 “显示 控制面板 的方向 ”下拉框中选择“ 横向 (翻转) 选项,则对 DxgkDdiCommitVidPn 函数的调用将从 D3DKMDT_VIDPN_PRESENT_PATH_ROTATION 枚举返回这些路径设置:

电视) (主克隆路径
D3DKMDT_VPPR_ROTATE180

辅助克隆路径 (设备)
D3DKMDT_VPPR_ROTATE180_OFFSET270

如果桌面窗口管理器 (DWM) 已将内容旋转 180 度,驱动程序仍必须在辅助克隆路径中再旋转 270 度。 否则,驱动程序必须将电视的内容旋转 180 度,设备旋转 90 度。 请注意,若要旋转内容,驱动程序必须设置 DXGK_PRESENTFLAGS 结构的 Rotate 成员。