在显示微型端口驱动程序中支持旋转

显示微型端口驱动程序的 DxgkDdiEnumVidPnCofuncModality 函数调用 pfnUpdatePathSupportInfo 函数,以报告对视频呈现网络 (VidPN) 拓扑中的每个路径的旋转支持。 有关报告轮换支持的详细信息,请参阅 枚举 Cofunctional VidPN 源和目标模式

Microsoft DirectX 图形内核子系统使用非旋转表面尺寸来创建共享的主图面。 为了通知显示微型端口驱动程序旋转图面,DirectX 图形内核子系统在对显示微型端口驱动程序DxgkDdiCommitVidPn DxgkDdiUpdateActiveVidPn 和 DxgkDdiUpdateActiveVidPnPresentPath 的 ContentTransformation 成员中指定的 D3DKMDT_VIDPN_PRESENT_PATH D3DKMDT_VIDPN_PRESENT_PATH_TRANSFORMATION 结构的 Rotation 成员中指定D3DKMDT_VIDPN_PRESENT_PATH_ROTATION类型的值 功能。

注意 所有旋转度都按逆时针方向定义,这与 GDI 定义旋转的方式一致。

当 DirectX 子系统通知显示微型端口驱动程序旋转图面时,驱动程序应仅当在调用驱动程序的 DxgkDdiPresent 函数时,在 pPresent 参数指向的 DXGKARG_PRESENT 结构的 Flags 成员中设置了 Rotate 位字段标志时,驱动程序才应旋转表面数据。 即使驱动程序确定屏幕的当前方向是从演示文稿数据旋转的,并且未设置 Rotate ,驱动程序也不应旋转数据。

克隆模式行为

克隆模式 是一种模式,其中视频呈现源通过视频呈现网络中多个路径连接到多个视频呈现目标。 (有关视频演示网络的详细信息,请参阅 多个监视器和视频演示网络。)

如果显示微型端口驱动程序在克隆模式下运行,则其处理旋转的方式不同,因为每个目标可能需要不同的旋转。 操作系统、各种版本的 Microsoft DirectX 运行时和用户模式客户端仅检测主要视频当前目标的方向。 因此,视频呈现源中的内容将始终与主要视频呈现目标的方向匹配。

下表显示了显示微型端口驱动程序在克隆模式下在所有相关情况下的行为方式。 Rotate 标志的设置是DXGKARG_PRESENT结构的 Flags 成员中 Rotate 位字段的设置。

主要目标 辅助目标 旋转标志 驱动程序行为

未旋转

未旋转

未设置

驱动程序不执行旋转。

未旋转

旋转

未设置

即使未设置 Rotate 标志, 驱动程序也会旋转辅助目标。

旋转

未旋转

设置

驱动程序轮换主要目标,但不旋转辅助目标。

旋转

未旋转

未设置

由于未设置 Rotate ,因此驱动程序不会旋转主要目标。 由于辅助目标与源中内容的方向不匹配,因此驱动程序必须旋转辅助目标。

当客户端感知旋转并且已正确定位源内容时,会出现这种情况。 因此,操作系统不设置 “旋转”。

旋转

旋转

设置

驱动程序同时轮换主要目标和辅助目标。

旋转

旋转

未设置

可感知旋转的客户端已正确定位源的内容。 因此,不需要额外的旋转。

克隆模式要求从Windows 8.1 更新开始

从Windows 8.1 更新开始,驱动程序必须满足这些要求。 如果启用了测试签名,则驱动程序无法满足这些要求时将进行系统 bug 检查。

主克隆路径
定义: 包含与源显示器重复的目标监视器的路径,例如,在笔记本电脑上复制显示器的外部监视器。

要求: 在主克隆路径中,驱动程序必须将 Offset0 设置为 TRUED3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORT中的其他 3 个偏移值设置为 FALSE

在纵向优先源显示的情况下,主克隆路径不是旋转偏移量。 这意味着主克隆路径的偏移量始终为零 (D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORTOffset0) 为 TRUE ,桌面窗口管理器 (DWM) 会提前旋转其内容以匹配正确的方向。

主克隆路径确定所有主克隆和辅助克隆目标的监视器刷新率。

辅助克隆路径
定义: 包含任何其他目标监视器(不是主克隆路径的一部分)的路径,该路径也会复制源显示。

要求: 在辅助克隆路径中,驱动程序必须将 D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORT 中的至少 4 个偏移值之一设置为 TRUE。 如果驱动程序不支持与路径无关的旋转,则应在所有辅助克隆路径中将 Offset0 设置为 TRUE

下面是驱动程序支持与路径无关的旋转时应进行的两个设置示例:

横向优先示例
如果源显示和辅助克隆路径中的目标都是横向优先监视器,则驱动程序将在辅助克隆路径中设置 D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORTOffset0TRUE ,将其他 3 个偏移值 D3DKMDT_VIDPN_PRESENT_PATH_ROTATION_SUPPORTFALSE。 或者在这种情况下,在辅助克隆路径中,驱动程序会将 Offset0Offset180 设置为 TRUE ,并将其他偏移值设置为 FALSE

纵向优先示例
如果源显示器是纵向优先设备并连接到横向优先外部监视器,则驱动程序会在辅助克隆路径中将 Offset270Offset90 设置为 TRUE

有关详细信息,请参阅 支持Path-Independent轮换