在以前的 WDDM 2.X 版本中添加的功能
本页介绍在早期版本的 WDDM 2.X for Windows 10 中添加的显示和图形驱动程序的功能。 若要查看为最新 WDDM 2.X 版本添加的功能,请参阅 Windows 10 显示和图形驱动程序的新增功能。
WDDM 2.6
超级湿墨迹
超级湿墨迹是一项围绕前缓冲区呈现的功能。 IHV 驱动程序可以支持创建硬件不支持的格式或模式的“可显示”纹理。 他们可以通过分配应用请求的纹理以及可显示格式/布局的“阴影”纹理,然后在当前两者之间复制来执行此操作。 这种“阴影”可能不一定是我们认为它的正常方式的纹理,但可能只是压缩数据。 此外,可能不需要存在,但可能是优化。
运行时将发展为了解可显示图面的以下方面:
是否必须存在阴影才能在特定 VidPnSource/平面上显示。
是否更适合阴影的存在。
何时将内容从应用程序图面传输到阴影图面。 运行时将明确表示此操作,而不是在 Present 中隐式运行。
如何请求设置模式或在原始图面和阴影图面之间动态翻转。
扫描可能在 VBlank 之后不久开始,从图像的顶部到底部垂直扫描,并在下一个 VBlank 之前不久完成。 这并非总是如此,具体取决于像素时钟的计时以及纹理中的数据布局:特别是当实际存在压缩可用时。
添加了新的 DDI 以分离和了解在扫描之前发生的转换,以便(如果可能)启用前缓冲区呈现。 请参阅 D3DWDDM2_6DDI_SCANOUT_FLAGS 和 PFND3DWDDM2_6DDI_PREPARE_SCANOUT_TRANSFORMATION。
可变速率底纹
可变速率底纹或粗糙像素底纹是一种机制,用于在呈现的图像之间以不同的速率分配渲染性能/电源。
在前面的模型中,为了使用 MSAA(多样本抗锯齿)来减少几何别名:
- 分配目标时,要减少几何别名的量需要提前知道。
- 分配目标后,无法更改用于减少几何别名的量。
在 WDDM 2.6 中,新模型通过添加新的粗着色概念,将 MSAA 扩展到相反的粗糙像素方向。 这是可以采用比像素更粗糙的频率执行底纹的地方。 可以将一组像素着色为单个单元,然后结果将广播到组中的所有样本。
粗糙底纹 API 允许应用指定属于着色组的像素数。 分配呈现目标后,粗糙像素大小可能会有所不同。 因此,屏幕的不同部分或不同的绘制通行证可以有不同的课程底纹速率。
可通过两个用户可查询上限使用多层实现。 对于第 1 层和第 2 层,粗着色可用于单采样资源和 MSAA 资源。 对于 MSAA 资源,可以像往常一样按粗像素或按样本执行着色。 但是,对于 MSAA 资源,在第 1 层和第 2 层上,粗采样不能用于以每像素和每样本之间的频率进行着色。
等级 1:
底纹速率只能按绘制指定;没有什么比这更精细的
着色速率统一应用于独立于它位于呈现目标内的位置绘制的内容
第 2 层:
可以按绘制指定底纹速率,如第 1 层所示。 也可以通过按绘图组合指定,以及:
- 每个挑衅顶点的语义,以及
- 屏幕空间图像
三个源中的底纹速率使用一组组合器进行组合
屏幕空间图像磁贴大小为 16x16 或更小。 保证完全交付应用请求的底纹速率(用于临时和其他重建筛选器的精度)
支持 SV_ShadingRate PS 输入。 每个引发的顶点速率(也称为按基元速率)仅在使用一个视区且未写入SV_ViewportIndex时才有效。
如果 SupportsPerVertexShadingRateWithMultipleViewports cap 标记为 true,则每个引发顶点速率(也称为按基元速率)可以与多个视区一起使用。 此外,在这种情况下,在写入SV_ViewportIndex时可以使用它。
请参阅 PFND3D12DDI_RS_SET_SHADING_RATE_0062 和 D3D12DDI_SHADING_RATE_0062。
收集诊断信息
通过收集诊断信息 ,OS 可以从图形适配器的驱动程序收集专用数据,这些驱动程序包括呈现和显示函数。 此新功能是 WDDM 2.6 中的一项要求。
新的 DDI 应允许 OS 在加载驱动程序时收集信息。 目前,OS 使用微型端口实现的 DxgkDdiCollectDebugInfo 函数来查询 TDR(超时检测和恢复)相关情况的驱动程序专用数据。 新的 DDI 将用于出于各种原因收集数据。 当需要诊断时,OS 将调用此 DDI,以提供所请求的信息类型。 驱动程序应收集所有重要信息,以调查问题并将其提交到 OS。 DxgkDdiCollectDebugInfo 最终将被弃用,并替换为 DxgkDdiCollectDiagnosticInfo。
请参阅 DXGKDDI_COLLECTDIAGNOSTICINFO。
后台处理
后台处理允许用户模式驱动程序表达所需的线程处理行为,以及运行时来控制/监视它。 用户模式驱动程序将运转后台线程,为线程分配尽量低的优先级,并依赖于 NT 计划程序来确保这些线程不会干扰关键路径线程(一般会成功)。
API 允许应用调整适合其工作负荷的后台处理量以及何时执行该工作。
请参阅 PFND3D12DDI_QUEUEPROCESSINGWORK_CB_0062。
驱动程序热更新
需要更新 OS 组件时,驱动程序热更新可尽可能减少服务器停机时间。
驱动程序热修补程序用于将安全修补程序应用到内核模式驱动程序。 在这种情况下,系统会要求驱动程序保存适配器内存、停止适配器、卸载驱动程序、加载新驱动程序,并再次启动适配器。
请参阅DXGKDDI_SAVEMEMORYFORHOTUPDATE 和 DXGKDDI_RESTOREMEMORYFORHOTUPDATE。
WDDM 2.5
跟踪的工作负载
跟踪的工作负载是一项实验性功能,可更好地控制更快的处理器执行与降低能耗之间的权衡,在进一步通知之前不可用。 该实现已从 Windows 10 版本 2003 中删除;并弃用早期操作系统版本作为安全修复的一部分。
内容更改
主题 | 日期 | 说明 |
---|---|---|
HMD 和专用显示器的 EDID 扩展 (VSDB) | 2018/12/03 | 显示制造商规范 |
DirectX 图形内核子系统 (Dxgkrnl.sys) | 12/04/2018 | Windows 操作系统通过 Microsoft DirectX 图形内核子系统(Dxgkrnl.sys)实现的内核模式接口。 |
WDDM 2.1 功能 | 01/10/2019 | 介绍 WDDM 2.1 的新增功能和更新的功能 |
光线跟踪
新的 Direct3D DDI 与 Direct3D API 并行创建,以支持硬件加速光线跟踪。 示例 DDI 包括:
- PFND3D12DDI_BUILD_RAYTRACING_ACCELERATION_STRUCTURE_0054
- PFND3D12DDI_COPY_RAYTRACING_ACCELERATION_STRUCTURE_0054
- PFND3D12DDI_EMIT_RAYTRACING_ACCELERATION_STRUCTURE_POSTBUILD_INFO_0054
- PFND3D12DDI_GET_RAYTRACING_ACCELERATION_STRUCTURE_PREBUILD_INFO_0054
有关光线跟踪的详细信息,请参阅:
显示同步
当驱动程序向 OS 公开显示器时,OS 将检查显示同步的功能,因此在启用显示之前。 对于 TypeIntegratedDisplay 子设备,这是通过调用 DxgkDdiQueryAdapterInfo 在适配器初始化期间使用 Type DXGKQAITYPE_INTEGRATED_DISPLAY_DESCRIPTOR2 报告。 对于从 WDDM 2.5 开始支持的 TypeVideoOutput 子设备,这些功能通过 DxgkDdiUpdateMonitorLinkInfo 作为热插即用处理的一部分进行报告,以便功能可能会根据目标或连接的监视器而更改。
OS 指定每个路径DXGK_SET_TIMING_PATH_INFO结构中输入字段的 DxgkDdiSetTimingsFromVidPn 调用中的显示同步。
WDDM 2.1
WDDM 2.1 支持新方案,并在性能、可靠性、升级复原能力、诊断改进和 Windows 图形子系统的未来系统改进方面提供显著改进。 WDDM 2.0 驱动程序模型是 D3D12 的先决条件。 WDDM 2.0 和 DirectX12 仅适用于 Windows 10 及更高版本。
下面是 WDDM 2.1 的功能添加和更新的列表。
通过减少在内存管理中花费的开销时间以及更高效地使用稀缺图形内存来提高图形性能。 图形性能改进包括:
- 提供和回收资源 - 提供和回收改进,以减少在后台模式下运行的应用程序的内存占用。
- 支持 2MB 页表项编码 - 在 WDDM 2.1 中,已启用 VRAM 中的大型页表条目(PTE)编码。 此更改可提升支持它的系统上的性能。
- 对 64KB 内存页的支持 - WDDM 2.1 中也支持使用 64KB 粒度的虚拟内存分配。 此更改通过减少访问虚拟内存页的开销,对 APU 和 SoC 尤其有利。
基于硬件的受保护内容改进与 当前批处理 (PlayReady 3.0)
用于图形驱动程序的驱动程序存储安装以提高驱动程序升级复原能力。
DXIL,新的着色器符合性语言
D3D12 性能和优化改进
改进了开发人员的诊断选项
有关详细信息,请参阅 WDDM 2.1 功能。
WDDM 2.0
WDDM 2.0 包括内存管理更新。
GPU 虚拟内存
- 所有物理内存都抽象化为可由图形处理单元(GPU)内存管理器管理的虚拟段。
- 每个进程获取自己的 GPU 虚拟地址空间。
- 已删除对重排范围的支持。
有关详细信息,请参阅 WDDM 2.0 中的 GPU 虚拟内存。
驱动程序驻留
- 在将命令缓冲区提交到驱动程序之前,视频内存管理器可确保分配驻留在内存中。 为了方便此功能,添加了用户模式驱动程序设备驱动程序接口(MakeResident、TrimResidency、Evict)。
- 分配和修补位置列表已逐步取消,因为在 WDDM 2.0 模型中不需要它。
- 用户模式驱动程序现在负责处理分配跟踪。 添加了多个 DDI 以启用此功能。
- 驱动程序将获得内存预算,并有望在内存压力下进行调整。 这允许通用 Windows 驱动程序跨应用程序平台运行。
- 添加了用于进程同步和上下文监视的 DDI。
有关详细信息,请参阅 WDDM 2.0 中的驱动程序驻留。