Direct3D 渲染性能改进

Windows 显示驱动程序模型 (WDDM) 1.3 及更高版本驱动程序可以支持 Microsoft Direct3D 呈现性能改进,使 Direct3D 9 硬件更好地利用硬件命令缓冲区和计数器,并将系统内存的有效副本复制到子资源。 这些功能反映了 Direct3D 版本 10 硬件可用的一些功能,从 Windows 8.1 开始是新的。

还可以使用新的 Direct3D 11.1 资源剪裁和映射默认性能改进。 下面的“行为更改”部分概述了设置中的默认地图场景。

呈现性能参考

本参考部分介绍用户模式设备驱动程序接口(DDI)。

由用户模式驱动程序实现的 Direct3D 呈现性能函数

本部分包含 Windows 显示驱动程序模型 (WDDM) 1.3 及更高版本的用户模式显示驱动程序实现的函数,以支持 Microsoft Direct3D 呈现性能改进。

PFND3DDDI_FLUSH1PFND3DDDI_CHECKCOUNTERINFO

PFND3DDDI_CHECKCOUNTERPFND3DDDI_UPDATESUBRESOURCEUP

Direct3D 呈现性能结构和枚举

这些用户模式结构和枚举支持呈现性能改进,并针对 Windows 8.1 进行了新的或更新。 除D3D11_1_DDI_FLUSH_FLAGS外,均适用于 Direct3D 级别 9 驱动程序。

从 WDDM 1.3 开始的 DDI 实现要求

从 WDDM 1.3 开始,用户模式驱动程序需要实现某些必需或可选的函数。

函数组 DESCRIPTION

在 WDDM 1.3 之前可选的 Direct3D 9 函数。 现在需要:

Direct3D 9 函数,自 WDDM 1.3 起提供。 驱动程序必须实现所有这些函数,或者不能实现以下任一函数:

当实现上述 WDDM 1.3 和更高版本的可选函数时,这些函数具有关联的行为更改:

调用 GetCaps 时,这些方案适用:

  • 如果设置了 D3DDDICAPS_GETD3DQUERYDATA ,驱动程序可以选择报告对时间戳的支持,这意味着 Direct3D 运行时不会屏蔽支持。
  • 如果设置了 D3DDDICAPS_GET_SIMPLE_INSTANCING_SUPPORT ,驱动程序可以报告实例化的可选硬件支持。

这些 Direct3D 11 函数有相关的行为变化:

对资源创建、映射和取消映射函数的调用的行为更改

对于 WDDM 1.3 及更高版本的驱动程序实现的这些函数,Direct3D 运行时为映射默认方案提供一组受限的输入值。 这些受限值仅适用于支持功能级别 11.1 及更高版本的驱动程序。

CreateResource(D3D11)函数 -

某些 D3D11DDIARG_CREATERESOURCE 结构中的输入成员受到限制:

成员 DESCRIPTION

ResourceDimensionUsage

这些行为更改仅适用于当 Direct3D 运行时为ResourceDimension提供类型D3D10DDIRESOURCE_BUFFER,并为Usage提供类型D3D10_DDI_USAGE_DEFAULT时。

BindFlags

Direct3D 运行时仅设置 D3D10_DDI_BIND_SHADER_RESOURCED3D11_DDI_BIND_UNORDERED_ACCESS 值。

MapFlags

如果满足此处列出的所有其他成员要求,则运行时可以设置 D3D10_DDI_MAP_READD3D10_DDI_MAP_WRITED3D10_DDI_MAP_READWRITE 值。 驱动程序必须支持这些值。 D3D10_DDI_MAP_WRITE_DISCARD的值和D3D10_DDI_MAP_WRITE_NOOVERWRITE的值无效。

MiscFlags

运行时仅设置 D3D11_DDI_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWSD3D11_DDI_RESOURCE_MISC_BUFFER_STRUCTURED 值。

格式

运行时仅设置 DXGI_FORMAT_UNKNOWN 值。

SampleDesc

运行时设置 DXGI_SAMPLE_DESC将成员计数 为 1, 质量 成员为零。

MipLevels

运行时将值设置为 1。

ArraySize

运行时将值设置为 1。

pPrimaryDesc

运行时将值设置为 NULL

ResourceMap函数 -

ResourceMap 的这些输入参数受到限制:

参数 DESCRIPTION

hResource

当在创建调用 CreateResource(D3D11) 中设置 MapFlags 的非零值时,Direct3D 运行时仅设置 D3D10DDIRESOURCE_BUFFER 资源。

运行时仅设置 DXGI_FORMAT_UNKNOWN 值。

子资源

运行时仅将值设置为 0。

DDIMap

如果满足此处列出的所有其他成员要求,则运行时可以设置D3D10_DDI_MAP_READD3D10_DDI_MAP_WRITED3D10_DDI_MAP_READWRITE值,与创建调用 CreateResource(D3D11)中设置的 MapFlags 值匹配。

标志

尽管运行时的输入值不受限制,但驱动程序必须能够支持 D3D10_DDI_MAP_FLAG_DONOTWAIT 值。

pMappedSubResource

尽管运行时的输入值不受限制,但驱动程序必须向 D3D10DDI_MAPPED_SUBRESOURCE分配有效的 CPU 可缓存指针。pData 成员,并且必须设置 RowPitchDepthPitch 以匹配缓冲区的大小和 pData 中提供的数据。

ResourceUnmap函数 -

ResourceUnmap 的这些输入参数受到限制:

参数 DESCRIPTION

hDevice

尽管 Direct3D 运行时的输入值不受限制,但与原始 ResourceMap 调用中的 hDevice 值匹配的值。

hResource

创建调用 CreateResource(D3D11)中设置 MapFlags 的非零值时,运行时仅设置D3D10DDIRESOURCE_BUFFER资源。

子资源

运行时仅将值设置为 0。