在 WDDM 1.2 和更高版本中提供无缝状态转换

从 Windows 8 开始,多项功能有助于在启动过程中、从低功耗状态转换期间以及驱动程序升级或系统 bug 检查中转换回操作系统控制期间,最大程度地减少或消除屏幕闪烁和闪烁。 此外,Windows 8 及更高版本的计算机上的系统固件必须在打开电源时检测集成显示面板的本机分辨率和计时,并将此信息移交给操作系统。 Windows 显示驱动程序模型 (WDDM) 1.2 及更高版本的显示微型端口驱动程序必须支持此行为。

最低 WDDM 版本 1.2
最大 Windows 版本 8
驱动程序实现 - 全图形和仅显示 必需
WHCK 要求和测试

System.Client.Firmware.UEFI.GOP.Display

Device.Graphics...PnpStopStartSupport

Device.Graphics...DisplayOutputControl

从固件转换到操作系统

面向客户端 SKU 的所有Windows 8系统都必须支持统一可扩展固件接口 (UEFI) 图形输出协议 (GOP) 。 在启动阶段,GOP 在系统的集成显示面板上设置本机计时和本机分辨率。 当操作系统准备好接管显示器的所有权时,GOP 会移交可用于扫描显示器的帧缓冲区。 此时,操作系统不会尝试重置显示计时或分辨率,而只是使用提供的帧缓冲区,从而消除一个屏幕闪烁。

硬件认证要求

有关硬件设备在实现此功能时必须满足的要求的信息,请参阅 System.Client.Firmware.UEFI.GOP.Display 上的相关 WHCK 文档

从操作系统转换到驱动程序

当操作系统在启动后将显示器的所有权移交给 WDDM 驱动程序时,它会通过调用 DxgkDdiStartDevice 函数启动设备启动即插即用 (PnP) 启动。 或者,在从休眠状态恢复后,操作系统通过调用 DxgkDdiSetPowerState 函数来启动设备,并将 DeviceUid 参数设置为 Video.h) 中定义的 DISPLAY_ADAPTER_HW_ID (。 此时,通常屏幕为空白, (呈现为黑色) 而 WDDM 图形驱动程序控制。

驱动程序可以调用 dxgkCbAcquirePostDisplayOwnership 函数, (从 Windows 8) 开始可用,以查询操作系统的当前帧缓冲区的确切状态以及固件和启动加载程序设置的显示模式。 使用此函数检索到 DXGK_DISPLAY_INFORMATION 结构中的信息后,驱动程序可能会使显示控制器保持活动状态,并且不会导致监视器的重新同步。 由于驱动程序还包含有关帧缓冲区的详细信息,因此可以执行更流畅的转换。

WDDM 1.2 及更高版本中的 即插即用 (PnP) 中提供了有关 PnP 启动的更多详细信息。

从驱动程序转换到操作系统

操作系统可以通过调用 DxgkDdiStopDevice 函数请求显示设备的 PnP 停止。 此时,通常屏幕为空白, (呈现为黑色) 而操作系统接管显示控件。 操作系统可以调用 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 函数, (从Windows 8) 开始可用,该函数要求 WDDM 驱动程序设置配置为扫描输出的帧缓冲区。操作系统可以在控制显示时呈现到此帧缓冲区中,从而可以执行平滑切换。

WDDM 1.2 及更高版本中的 即插即用 (PnP) 中提供了有关 PnP 停止(包括其他方案)的更多详细信息。

硬件认证要求

有关此移交的详细信息,请参阅 Device.Graphics... 上的相关 WHCK 文档。PnpStopStartSupport

在不禁用驱动程序的情况下转换到操作系统

有时操作系统遇到不可恢复的错误,必须发出系统 bug 检查。 发生这种情况时,在某些情况下,操作系统必须控制显示器,但无法停止 WDDM 驱动程序。 需要 WDDM 1.2 及更高版本的驱动程序来实现 DxgkDdiSystemDisplayEnableDxgkDdiSystemDisplayWrite 函数,使操作系统可以无缝过渡到可以显示错误屏幕的状态,同时保持高分辨率和颜色深度的图形界面。 这种转换消除了不和谐的用户体验。

硬件认证要求

有关硬件设备在实现此功能时必须满足的要求的信息,请参阅 Device.Graphics... 上的相关 WHCK 文档。DisplayOutputControl

Windows 8固件模式更改

以下是固件在将控制权移交给操作系统之前对固件显示模式的更改:

WDDM 1.2 及更高版本的驱动程序 (DXGKDDI_INTERFACE_VERSION>= DXGKDDI_INTERFACE_VERSION_WIN8)
为了进一步消除显示闪烁,从Windows 8开始,不会在 WDDM 1.2 及更高版本的驱动程序的固件上调用 Int10 模式更改请求。

此外,如果在关闭监视器时发生模式更改,操作系统仅调用 DxgkDdiCommitVidPn 函数一次,并将 pCommitVidPnArg 参数设置为打开监视器时将具有的值,并将 pCommitVidPnArg-Flags> 的 PathPoweredOff 成员设置为 TRUE

WDDM 1.0 和 1.1 驱动程序 (DXGKDDI_INTERFACE_VERSION<DXGKDDI_INTERFACE_VERSION_WIN8)
对于在 Windows 8 上运行的 WDDM 版本 1.0 和 1.1 驱动程序,在启动过程中或从休眠状态恢复时,将调用 Int10 VGA 模式0x12,将显示分辨率设置为监视器的本机高分辨率。 在Windows 8之前,int10 VGA 模式0x12调用将显示分辨率设置为 640 x 480 像素,每像素 16 位,且不闪烁光标,以显示操作系统初始屏幕图像。

但是,对于指示不支持高分辨率模式的 WDDM 版本 1.0 和 1.1 驱动程序,从启动Windows 8开始进入 VGA 模式0x12将显示分辨率设置为 640 x 480 像素,每像素 16 位,且光标不闪烁。 当系统从休眠状态恢复时,显示分辨率仍将设置为监视器的本机高分辨率。

此外,如果在关闭监视器时发生模式更改, 操作系统为 WDDM 1.2 驱动程序调用如上所述的 DxgkDdiCommitVidPn 函数,并且第次使用 pCommitVidPnArg-hFunctionalVidPn> 中设置的空视频网络 (VidPN) 调用 DxgkDdiCommitVidPn,并且没有在 pCommitVidPnArg-Flags> 中设置任何标志值。

当系统在休眠后恢复并且监视器同步生成保持启用状态时,也会发生由两部分构成的调用序列。 在这种情况下,驱动程序在收到对 DxgkDdiCommitVidPn 的第二次调用时不应执行任何操作。