Windows 10 显示驱动程序和图形驱动程序的新增功能

本页介绍适用于 Windows 10 版本 2004 (WDDM 2.7) 的显示和图形驱动程序的新增功能。 若要查看在早期版本的 WDDM 2.X 中添加的功能,请参阅 早期 WDDM 2.X 版本的新增功能

网格着色器

使用光栅化时,网格着色器可以提高 Direct3D 12 图形管道的灵活性和性能。 它们充当输入汇编程序(尤其是顶点和几何着色器阶段)的新替代品,将某些输入汇编器的固定函数行为替换为灵活函数行为。 使用网格着色器,应用程序可以比输入汇编程序更早、更高效地应用剔除。 基元可以在不由 GPU 处理索引数据的情况下被剔除,这非常有用,因为我们看到 3D 应用程序的基元计数随时间推移越来越高。

如果附加了像素着色器,网格着色器的基元输出将直接馈送到像素着色器阶段。

网格着色器功能引入了网格着色器阶段以及新阶段:放大着色器。 放大着色器取代 GPU 分割阶段。 应用程序设置其放大着色器以根据需要调用网格着色器的某些次数。 放大着色器是一个可选步骤,它允许应用程序动态控制几何细节级别。

网格着色器功能涉及新的着色语言构造以及 UMD 更改。 对于网格着色器的报告设备功能,可通过D3D12DDI_D3D12_OPTIONS_DATA_0073报告一个名为 MeshShaderTier 的字段。 此外,由于这引入了两个新的着色器阶段, 因此D3D12DDIARG_CREATE_PIPELINE_STATE_0075中有两个新字段, 即 hMeshShaderhAmplificationShader。 若要开始操作,有命令列表 DDI PFND3D12DDI_DISPATCH_MESH_0074 ,还 D3D12DDI_INDIRECT_ARGUMENT_TYPE_DISPATCH_MESH 间接调度。

DirectX 光线跟踪 (DXR) 1.1

WDDM 2.7 在 Direct3D 12 中 DXR 的初始版本的基础上引入了一些新功能和改进。

  • 内联光线追踪是光线追踪的一种替代形式,不使用任何单独的动态着色器或着色器表。 在使用 DXR 1.0 样式光线追踪的着色器(称为“基于动态着色器”的光线追踪)不适合的所有情况下,它为开发人员提供了一些灵活性和一些便利。 内联光线跟踪可用于任何着色器阶段,包括计算着色器、像素着色器等。 此处提到的这是 WDDM 2.7 中可用的内容,尽管它不对应于 DDI 更改。

  • 应用程序可以通过 ExecuteIndirect 调用 DispatchRays,从而允许在 GPU 上配置光线跟踪工作。 这对于寻求剔除、排序或调整光线追踪工作且使用着色器执行此操作的应用程序可能很有用。 同时,现在有一个D3D12DDI_INDIRECT_ARGUMENT_TYPE枚举值。 使用间接光线跟踪调度时,执行间接缓冲区的每个元素的类型 D3D12DDIARG_DISPATCH_RAYS_0054

  • 创建管道状态以考虑不同着色器组合的开销是 3D 计算机图形中的难题之一。 DXR 1.1 包含可提供帮助的内容:add-to-state-object。 AddToStateObject () 在 API 中公开,它允许应用程序将着色器添加到现有状态对象,其 CPU 开销仅与要添加的内容成正比。 同时,还有两个设备 DDI 函数: PFND3D12DDI_ADD_TO_STATE_OBJECT_0072PFND3D12DDI_CALC_PRIVATE_ADD_TO_STATE_OBJECT_SIZE_0072

对于常规功能报告, D3D12DDI_RAYTRACING_TIER_1_1 用于报告层 1.1 的新枚举值。

取样器反馈

取样器反馈是一项 Direct3D 12 功能,用于捕获和记录纹理采样信息和位置。 如果没有采样器反馈,这些详细信息对开发人员是不透明的。 此功能使应用程序不仅能够知道 mip 的采样,还能够知道这些 mip 的采样位置。 应用程序可能对信息采样感兴趣,例如,用于:

  • 准确了解纹理流式处理系统中接下来要加载的内容,或者
  • 准确了解纹理空间着色呈现系统中需要着色的内容。

示例操作的反馈将写入“反馈映射”,该映射充当一种不透明的资源,必须对其进行转码才能获取应用程序可检查的信息。至于反馈本身的编写,着色器模型 6_5 中有 HLSL 构造。 语义与 Texture2D 示例及其变体的语义非常相似。

虽然采样器反馈很好地利用了新的着色语言构造,但它也涉及 UMD 更改。 对于设备功能检查,可以通过D3D12DDI_D3D12_OPTIONS_DATA_0073报告一个名为 SamplerFeedbackTier 上限。 资源创建已修改为 采用D3D12DDI_MIP_REGION_0075类型的新字段(采样器反馈 mip 区域)。 同时,还有一个新的描述符创建方法 ,PFND3D12DDI_CREATE_SAMPLER_FEEDBACK_UNORDERED_ACCESS_VIEW_0075

内容保护

WDDM 2.7 中的 Direct3D 12 视频操作添加了可选的受保护资源支持。 对于后台,受保护的资源存在于 WDDM 2.7 之前,但仅适用于跨 API 共享和图形或计算,不适用于视频。

驱动程序不会将对受保护资源的支持报告为全局性内容;它基于每个操作。 如果驱动程序报告支持特定操作的受保护资源,这意味着该操作可以读取和写入受保护的资源,并支持跨 API 共享(如果资源类型允许)。 另一个值得一提的是,如果驱动程序声明对特定格式的受保护资源支持,它也必须支持该格式作为非受保护的资源。

在 WDDM 2.7 中,资源创建方法被修改为采用可选的D3D12DDI_HPROTECTEDRESOURCESESSION实例。 驱动程序在创建对象时提供此参数,以通知设置和分配。 此外,还会修改内存预算检查,以指示操作是否将使用受保护的资源。 当 protected-resource-session 参数为非 NULL 时,这表示操作将写入受保护的资源。 若要写入未受保护的资源,必须重新创建操作对象。

当输出是受保护的资源时,解码器和运动估计引用必须是受保护的资源。 写入受保护资源时,视频处理可能会从受保护和未受保护的资源的组合读取。

在记录写入受保护资源的一个或多个操作之前,必须使用非 NULL 保护的资源会话调用 PFND3D12DDI_SETPROTECTEDRESOURCESESSION_0030 。 在记录写入到非受保护资源的一个或多个操作之前,需要使用 NULL 调用PFND3D12DDI_SETPROTECTEDRESOURCESESSION_0030

若要了解上述有关 WDDM 2.7 中内容保护的 DDI 更改的引导教程之外的详细信息,请参阅 D3D12DDI_VIDEO_DECODE_PROTECTED_RESOURCES_DATA_0072 作为起点。

改进了工具的历史记录缓冲区报告

WDDM 2.7 引入了 DDI 更改,这有利于 GPU 调试工具使用历史记录缓冲区。 通过此更改,单个命令缓冲区提交可以包含与多个命令列表对应的工作,而不是一次只包含单个命令列表。 此更改允许 GPU 调试工具更准确地报告应用程序的性能特征。

此功能通过 D3D12DDICAPS_TYPE_0073_SUPPORT_BATCHED_MARKERS 报告。 枚举值 D3DDDIMLT_BATCHED 有一个新的D3DDDI_MARKERLOGTYPE,对应于 D3DDDI_BATCHEDMARKERDATA。 ETW 事件数据结构已更新为包含D3DDDIMLT_BATCHED类型的 D3DDDI_BATCHEDMARKERDATA 元素。

DisplayPort (DP) AUX/I2C

DP 辅助 (AUX) 通道提供对 DP Configuration Data (DPCD) 的访问,这是用于读取 DP 设备功能、链接训练、拓扑发现、I2C 总线访问等每个设备的寄存器文件。 请参阅 DXGK_DP_INTERFACE 作为起点。