所有 Windows 显示驱动程序模型 (WDDM) 1.2 及更高版本的显示微型端口驱动程序都必须支持以下行为,以响应即插即用 (PnP) 基础结构启动和停止请求。 行为可能有所不同,具体取决于驱动程序是否返回成功或失败代码,或者系统硬件是基于基本输入/输出系统(BIOS)还是统一可扩展固件接口(UEFI)。
| 最低 WDDM 版本 | 1.2 |
| 最大 Windows 版本 | 8 |
| 驱动程序实施–完整图形和仅显示 | 强制的 |
| WHCK 要求和测试 | Device.Graphics.WDDM12.Display.PnpStopStartSupport |
显示微型端口驱动程序 PnP DDI
从 Windows 8 开始,Microsoft DirectX 图形内核子系统提供此函数,如果显示设备已启动或从休眠状态恢复,驱动程序可以调用该函数:
这些函数和结构可用于显示微型端口驱动程序,以实现 WDDM 1.2 及更高版本的 PnP 要求:
- DxgkDdiStopDeviceAndReleasePostDisplayOwnership
- DxgkDdiSystemDisplayEnable
- DxgkDdiSystemDisplayWrite
- DXGK_DISPLAY_INFORMATION
PnP 启动操作
在启动期间或在从一个显示驱动程序升级到另一个显示驱动程序期间,显示设备上的即插即用(PnP)启动过程发生。 在这种情况下,驱动程序必须调用 DxgkCbAcquirePostDisplayOwnership 函数以获取有关帧缓冲区的信息和维护显示同步。 帧缓冲区信息是从固件提供的,也可以从系统上加载的以前的 WDDM 1.2 及更高版本的驱动程序提供。
作系统在调用 DxgkDdiSetPowerState 函数以返回到 D0 电源状态,以及调用 DxgkDdiStartDevice 函数时,WDDM 1.2 及更高版本的驱动程序必须将所有活动视频呈现网络(VidPN)目标的源可见性设置为 false(DXGKARG_SETVIDPNSOURCEVISIBILITY。Visible = FALSE)。 在这种情况下,显示管道硬件必须始终与监视器同步,但无论当前正在扫描的图面中有什么像素数据,管道都必须持续向监视器发送黑色像素数据。这意味着像素管道保证使用全黑像素来对监视器进行空白化。 稍后,当第一帧呈现到帧缓冲区中时,操作系统会将源可视性设置为 true。
所有这些过程都会使显示器保持同步运行,并确保用户在屏幕上看不到闪烁或抖动。
这些是驱动程序应在 PnP 启动过程后返回的返回代码。
| 驱动程序返回代码 | DESCRIPTION |
|---|---|
成功 |
行为与 Windows 7 中的行为相同。 对于基于 BIOS 的系统,如果驱动程序成功启动,帧缓冲区仍然处于活动状态,并且驱动程序必须准备好设置为有效模式。 |
失败 |
对于基于 BIOS 的系统,驱动程序必须使系统保持 BIOS 兼容状态。 对于基于 UEFI 的系统,驱动程序必须将显示器保留为由 UEFI 图形输出协议 (GOP) 设置的相同模式,以便基本显示驱动程序可以使用显示器。 驱动程序必须返回有效的错误代码。 如果驱动程序无法使 GOP 处于基本显示驱动程序可以使用的状态,驱动程序必须从 Ntstatus.h 返回 STATUS_GRAPHICS_STALE_MODESET 错误代码,并且操作系统会引发系统错误检查。 |
PnP 停止操作
当驱动程序升级到新版本时,显示设备上的即插即用(PnP)停止进程通常会发生。 在这种情况下,操作系统会调用驱动程序的 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 函数,这要求驱动程序提供准确的帧缓冲区信息。
在调用 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 函数时,驱动程序必须确保活动 VidPn 目标的源可见性为 TRUE(DXGKARG_SETVIDPNSOURCEVISIBILITY.可见 = TRUE)。 此外,从 WDDM 1.2 开始,驱动程序需要确保对像素管道进行编程,以便从中扫描出的表面充满黑色像素。 在源可见性设置为 true 之前,驱动程序应使用黑色像素完成填充图面。
请务必在驱动程序中实现 DxgkDdiStopDevice 。 在某些情况下,操作系统可能会调用 DxgkDdiStopDevice 而不是 DxgkDdiStopDeviceAndReleasePostDisplayOwnership,或者在调用 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 失败后调用。
这些是驱动程序应在 PnP 停止进程后返回的返回代码。
| 驱动程序返回代码 | DESCRIPTION |
|---|---|
成功,驱动程序返回模式信息 |
在驱动程序停止之前,它必须以当前分辨率设置一个帧缓冲区供基本显示驱动程序使用,并且在操作系统调用 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 函数时,驱动程序必须返回有关该帧缓冲区的信息。 保存的模式信息不必与 BIOS 兼容,在系统重新启动之前,基本显示驱动程序不会提供 BIOS 模式。 如果 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 返回STATUS_SUCCESS,操作系统保证不会调用 DxgkDdiStopDevice。 |
成功,驱动程序将DXGK_DISPLAY_INFORMATION结构的 Width 和 Height 成员设置为零 |
仅当系统具有两张图形卡、没有监视器连接到当前电源自检(POST)设备,并且操作系统调用 DxgkDdiStopDeviceAndReleasePostDisplayOwnership 函数以停止 POST 设备时,此方案才可能实现。 在这种情况下,当前显示器将继续在第二个图形适配器上运行,基本显示驱动程序在支持 POST 设备的适配器上以无外设模式运行。 |
失败 |
操作系统通过 DxgkDdiStopDevice 函数调用 Windows 7 样式的 PnP 停止驱动程序接口。 对于基于 BIOS 的系统,驱动程序必须将显示器设置为与 BIOS 兼容的模式。 对于基于 UEFI 的系统,基本显示驱动程序在图形适配器上以无外设模式运行。 |
有关 PnP 和其他状态转换的进一步要求,请参阅 在 WDDM 1.2 及更高版本中提供无缝状态转换。
硬件认证要求
有关硬件设备在实现此功能时必须满足的要求的信息,请参阅 Device.Graphics.WDDM12.Display.PnpStopStartSupport 的相关 WHCK 文档。
有关使用 Windows 8 添加的功能的回顾,请参阅 WDDM 1.2 功能 。