window 图形显示驱动-在 WDDM 1.2 中提供无缝状态转换(下)
在不禁用驱动程序的情况下转换到操作系统
有时操作系统遇到不可恢复的错误,必须发出系统 bug 检查。 发生这种情况时,在某些情况下,操作系统必须控制显示器,但无法停止 WDDM 驱动程序。 需要 WDDM 1.2 及更高版本的驱动程序来实现 DxgkDdiSystemDisplayEnable 和 DxgkDdiSystemDisplayWrite 函数,使操作系统可以无缝过渡到可以显示错误屏幕的状态,同时保持高分辨率和颜色深度的图形界面。 这种转换消除了不和谐的用户体验。
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 的第二次调用时不应执行任何操作。