Windows 图形显示驱动开发-WDDM的优势和迁移

发布于:2025-02-16 ⋅ 阅读:(36) ⋅ 点赞:(0)

优势

XDDM 和 VGA 驱动程序在 Windows 8 及更高版本的操作系统上无法编译。 如果显示硬件连接到没有经过认证支持 WDDM 1.2 或更高版本的驱动程序的 Windows 8 计算机,则系统默认运行基本显示驱动程序。

由于以下增强功能,使用 WDDM 创建图形/显示驱动程序比使用 Windows 2000 显示驱动程序模型 (XDDM) 更容易。 此外,WDDM 驱动程序有助于提高操作系统的稳定性和安全性。 较少的驱动程序代码在内核模式下运行,在这种模式下,它可以访问系统地址空间,并可能导致崩溃。

Direct3D 运行时和 DirectX 图形内核子系统 (Dxgkrnl) 执行更多的显示处理;也就是说,与驱动程序相比,运行时和子系统中有更多的代码。 此处理包括管理视频内存和为 GPU 计划直接内存访问 (DMA) 缓冲区的代码。

1. Surface 创建需要更少的内核模式阶段。

在 Windows Vista 之前的操作系统上创建 Surface 需要以下连续的内核模式调用:

  • DdCanCreateSurface
  • DdCreateSurface
  • D3dCreateSurfaceEx

WDDM 中的 Surface 创建只需要 CreateResource 用户模式显示驱动程序调用,后者又调用运行时的 pfnAllocateCb 函数。 此调用会导致 Dxgkrnl 调用内核模式驱动程序的 DxgkDdiCreateAllocation 函数。

2. 创建和销毁图面以及锁定和解锁资源的调用配对更为均匀。

3. WDDM 以相同的方式处理视频内存、系统内存和托管图面。 Windows Vista 之前的操作系统处理这些组件的方式略有不同。

4. 着色器转换在显示驱动程序的用户模式部分执行。

这种方法消除了在内核模式下执行着色器转换时出现的以下复杂性:

  • 与设备驱动程序接口 (DDI) 抽象不匹配的硬件模型
  • 转换中使用的复杂编译器技术

由于着色器处理完全按进程进行,并且不需要硬件访问,因此不需要内核模式着色器处理。 因此,可以在用户模式下处理着色器转换代码。

必须围绕用户模式转换代码编写 try/except 代码。 转换错误会导致返回到应用程序处理。

后台转换(即在与其他显示处理线程分开的线程中运行的转换代码)更容易为用户模式编写。

如何迁移

若要迁移到 Windows 显示驱动程序模型 (WDDM),驱动程序开发人员需要编写完全不同的显示和视频微型端口驱动程序。 与 Windows 2000 显示驱动程序模型 (XDDM) 类似,WDDM 需要配对的显示驱动程序和显示微型端口驱动程序。 但是,在 WDDM 中:

  • 显示驱动程序在用户模式下运行,因此称为用户模式显示驱动程序 (UMD)。
  • 视频微型端口驱动程序称为内核模式显示微型端口驱动程序 (KMD)。
  • 该模型不使用 Windows 图形设备接口 (GDI) 引擎的服务。 而是使用 Direct3D 运行时和 DirectX 图形内核子系统 (Dxgkrnl.sys) 的服务。

尽管驱动程序编写器可以在 WDDM 驱动程序中重复使用低级硬件依赖代码,但它们应重写与新设备驱动程序接口 (DDI) 相关的代码。 编写 WDDM 驱动程序时,请考虑以下几点:

1. KMD 必须实现一组修订的入口点函数,以便与操作系统和 DirectX 图形内核子系统 (Dxgkrnl.sys) 进行交互。 有关详细信息,请参阅显示微型端口驱动程序的 DriverEntry。 KMD 可以调用任何记录在案的内核模式函数。

2. KMD 动态加载相应的 Dxgkrnl.sys。 KMD 和 Dxgkrnl 通过接口相互调用。

3. 不再需要 KMD 来处理大多数视频 I/O 控制代码 (IOCTL)。 在 XDDM 中,内核模式显示驱动程序使用这些代码与视频微型端口驱动程序通信。 在 WDDM 中,UMD 与 Direct3D 运行时通信。 然后,Dxgkrnl 与 KMD 通信。

4. WDDM 仍使用以下 IOCTL,KMD 必须处理它们:

IOCTL_VIDEO_QUERY_COLOR_CAPABILITIES
IOCTL_VIDEO_HANDLE_VIDEOPARAMETERS

5. UMD 必须实现并导出 OpenAdapter 函数,该函数将打开图形适配器的实例。 UMD 还必须实现 CreateDevice 函数,该函数创建处理呈现状态集合的显示设备的表示形式。

6. UMD 的 CreateResource 函数以及 KMD 的 DxgkDdiCreateAllocation 函数取代了 XDDM 中的 DdCanCreateSurface、DdCreateSurface 和 D3dCreateSurfaceEx 函数。

7. 其余的大多数 UMD 函数实现了与内核模式 XDDM 显示驱动程序在以下函数中实现的功能相同的功能:

D3dDrawPrimitives2 函数和 DP2 操作代码
运动补偿回调函数和 DirectX 视频加速结构

 


网站公告

今日签到

点亮在社区的每一天
去签到