当前位置: 首页 > news >正文

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

优势

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 视频加速结构

 

相关文章:

  • 03-微服务01(服务拆分、RestTemplate,nacos、OpenFeign、日志)
  • 区块链中的数字签名:安全性与可信度的核心
  • 小程序之间实现互相跳转的逻辑
  • 详解Cookie和Session
  • DeepseeK自动写作,自动将回答导出文档
  • 小米 R3G 路由器(Pandavan)实现网络打印机功能
  • LINUX常用命令学习
  • vue开发06:前端通过webpack配置代理处理跨域问题
  • Linux 共享内存
  • Python教程108:针对面向对象Class类知识要点,源码示例再演示
  • Qt的QTreeWidge的使用
  • 从技术债务到架构升级,滴滴国际化外卖的变革
  • MySQL错误-this is incompatible with sql_mode=only_full_group_by完美解决方案
  • 大模型的未来已来
  • 苍穹外卖学习
  • 谭浩强C语言程序设计(5) 9章
  • 通俗理解-L、-rpath和-rpath-link编译链接动态库
  • pyqt自制简单浏览器(python)
  • QT c++ QObject::connect函数 线程给界面发送数据
  • JavaScript设计模式 -- 观察者模式
  • 个体工商户 经营性网站/网站搜索排名查询
  • 百度站长工具添加网站验证/域名注册管理机构
  • 网站记录登录账号怎么做/如何查询网站收录情况
  • 成都专门做公司网站的公司/爱站网是什么
  • asp.net 当前网站/西安核心关键词排名
  • 织梦做仿站时 为何会发生本地地址跳转网站地址/北京网站seo服务