Windows 图形显示驱动开发-概述
今天的图形和显示驱动程序是在 Windows 显示驱动程序模型(WDDM)上开发的。
计算加速器驱动程序使用 Microsoft计算驱动程序模型 (MCDM),这是 WDDM 2.0+ 的子集。
Windows 显示驱动程序模型l (WDDM) 是适用于 Windows 的图形显示驱动程序体系结构。 它是在 Windows Vista (WDDM 1.0) 中引入的,并随着每个 Windows 版本的发布而不断改进。
从 Windows 8 (WDDM 1.2) 开始,WDDM 是必需的。
WDDM 的主要功能包括:
- WDDM 支持 GPU 计划。 抢占式计划允许更好地管理 GPU 资源,因为多个应用程序可以更高效地共享 GPU。
- WDDM 支持 GPU 的虚拟内存管理,允许更复杂的和更大的图形工作负载,而不会耗尽物理内存。
- WDDM 驱动程序由用户模式和内核模式组件组成,降低了由于驱动程序故障导致系统崩溃的可能性。
- WDDM 与 DirectX 紧密集成。 此集成可确保应用程序能够使用新式 GPU 的全部功能,以及更复杂、更高效的呈现技术。
- WDDM 支持 TDR(超时检测和恢复),从而提高了系统稳定性。
- WDDM 支持多个监视器,允许无缝配置和管理多显示器设置。
Windows 显示驱动程序模型 (WDDM) 具有用户模式和内核模式组件。 下图显示 WDDM 体系结构的各个组件。
系统提供的模块以白框形式显示在图中。 灰色框表示合作伙伴可以提供的模块。 应用程序可由系统提供或合作伙伴开发。
系统提供的模块
以下系统提供的模块是 WDDM 体系结构的一部分:
Direct3D 运行时是一个用户模式组件,它为应用程序提供应用程序 API。 它提供各种服务,负责管理应用程序、用户模式图形驱动程序 (UMD) 和 gdi32.dll 之间的交互。
gdi32.dll 是 D3D 运行时或合作伙伴图形客户端链接所针对的用户模式库。 运行时或客户端调用 gdi32“thunk”,用于将调用路由到 DirectX 内核子系统 (Dxgkrnl) 中的相应内核模式函数。
Dxgkrnl 是 Windows 操作系统内核模式图形子系统的核心组件。 它有助于操作系统、UMD 和内核模式显示微型端口驱动程序 (KMD) 之间的通信。 Dxgkrnl 包括显示端口驱动程序、内存管理器 (VidMm) 和计划程序 (VidSch) 等子组件。 Dxgkrnl 由以下系统文件组成:
dxgmms2.sys,它实现 WDDM 2.0 及更高版本的 GPU/NPU 计划程序及视频内存管理器。
dxgmms1.sys,它实现 WDDM 2.0 之前的 WDDM 版本的 GPU/NPU 计划程序及视频内存管理器。
dxgkrnl.sys,它处理 DirectX 内核子系统中的其他所有内容,包括加载所需的 dxgmms.sys 文件、用户模式、显示模式、GPU 虚拟化、电源管理、内核执行接口等 D3DKMTXxx 调用的初始处理。
Win32 GDI 和 Win32k.sys 是某些应用程序仍使用的旧组件。
第三方提供的模块
UMD 是 Direct3D 运行时加载的动态链接库 (DLL)。
KMD 与 Dxgkrnl 和图形硬件通信。
图形硬件供应商必须同时提供 UMD 和 KMD。
第三方合作伙伴图形客户端是具有其自己的 API 和框架的用户模式组件。 它调用 gdi32 thunk 来与内核模式图形子系统通信。 D3DKMT_CLIENTHINT 列出了Microsoft 知道的客户端。