(WDDM) 1.2 及更高版本显示微型端口驱动程序的所有 Windows 显示驱动程序都必须支持以下行为,以响应即插即用 (PnP) 基础结构启动和停止请求。 根据驱动程序返回成功或失败代码,或者系统硬件是基于基本输入/输出系统 (BIOS) 还是统一可扩展固件接口 (UEFI) ,行为可能会有所不同。
显示微型端口驱动程序 PnP DDI
从 Windows 8 开始,Microsoft DirectX 图形内核子系统提供此函数,当显示设备启动或从休眠状态恢复时,驱动程序可以调用该函数:
DxgkCbAcquirePostDisplayOwnership
这些函数和结构可用于显示微型端口驱动程序,以实现 WDDM 1.2 及更高版本的 PnP 要求:
DxgkDdiStopDeviceAndReleasePostDisplayOwnership
DxgkDdiSystemDisplayEnable
DxgkDdiSystemDisplayWrite
DXGK_DISPLAY_INFORMATION
PnP 启动操作
在启动期间或从一个显示驱动程序升级到另一个显示驱动程序期间,在显示设备上发生即插即用 (PnP) 启动过程。 在这种情况下,驱动程序必须调用 DxgkCbAcquirePostDisplayOwnership 函数来获取有关帧缓冲区的信息并保持显示同步。 帧缓冲区信息是从固件或从系统上加载的以前的 WDDM 1.2 及更高版本的驱动程序提供的。
在调用操作系统使 DxgkDdiSetPowerState 函数返回到 D0 电源状态和 DxgkDdiStartDevice 函数期间,WDDM 1.2 及更高版本的驱动程序必须将源可见性设置为 false (DXGKARG_SETVIDPNSOURCEVISIBILITY。可见 = 所有活动视频呈现网络 (VidPN) 目标的 FALSE) 。 在这种情况下,显示管道硬件必须与监视器保持同步信号,但管道必须继续将黑色像素数据发送到监视器,无论当前正在扫描的图面中存在什么像素数据。这意味着,像素管道保证会用所有黑色像素为监视器留空。 稍后,当第一个帧呈现到帧缓冲区中时,操作系统会将源可见性设置为 true。
所有这些过程使监视器保持同步,并确保用户不会在屏幕上看到闪烁或闪烁。
PnP 停止操作
驱动程序升级到新版本时,通常会在显示设备上发生即插即用 (PnP) 停止进程。 在这种情况下,操作系统调用驱动程序的 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 函数,这要求驱动程序提供准确的帧缓冲区信息。
在 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 调用中,驱动程序必须确保活动 VidPn 目标的源可见性为 true, (DXGKARG_SETVIDPNSOURCEVISIBILITY。可见 = TRUE) 。 此外,从 WDDM 1.2 开始,驱动程序需要确保将像素管道编程为从中扫描出来的表面填充黑色像素。 在源可见性设置为 true 之前,驱动程序应使用黑色像素完成表面填充。
此外,请确保在驱动程序中实现 DxgkDdiStopDevice 。 在某些情况下,操作系统可能会调用 DxgkDdiStopDevice 而不是 DxgkDdiStopDeviceAndReleasePostDisplayOwnership,或者在调用 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 失败之后。