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_FLUSH1: PFND3DDDI_CHECKCOUNTERINFO
PFND3DDDI_CHECKCOUNTER: PFND3DDDI_UPDATESUBRESOURCEUP
Direct3D 呈现性能结构和枚举
这些用户模式结构和枚举支持呈现性能改进,并针对Windows 8.1进行了更新或更新。 除 D3D11_1_DDI_FLUSH_FLAGS外,所有驱动程序均适用于 Direct3D 级别 9 驱动程序。
- D3DDDI_FLUSH_FLAGS (新)
- D3DDDIARG_COPYFLAGS (新)
- D3DDDIARG_COUNTER_INFO (新)
- D3DDDIARG_UPDATESUBRESOURCEUP (新)
- D3DDDICAPS_SIMPLE_INSTANCING_SUPPORT (新)
- CreateResource2 (WDDM 1.3 及更高版本的 Direct3D 级别 9 驱动程序必须返回 E_INVALIDARG 错误代码(如果 CaptureBuffer 标志值设置为)
- ) 添加D3D11_1_DDI_FLUSH_FLAGS ( D3DWDDM1_3DDI_TRIM_MEMORY常量
- ) 添加了D3DDDI_DEVICEFUNCS (pfnFlush1、 pfnCheckCounterInfo、 pfnCheckCounter、 pfnUpdateSubresourceUP 成员
- ) 添加D3DDDI_POOL ( D3DDDIPOOL_STAGINGMEM常量
- ) 添加D3DDDICAPS_TYPE (D3DDDICAPS_GET_SIMPLE_INSTANCING_SUPPORT常量
- GetCaps 在“备注”) 中 (新信息
从 WDDM 1.3 开始的 DDI 实现要求
从 WDDM 1.3 开始,用户模式驱动程序需要或可选以下函数才能实现。
函数组 | 说明 |
---|---|
在 WDDM 1.3 之前是可选的 Direct3D 9 函数。 现在需要: |
|
从 WDDM 1.3 开始可用的 Direct3D 9 函数。 驱动程序必须实现所有这些函数,或者不实现以下任何函数: |
|
当实现上面的 WDDM 1.3 及更高版本的可选函数时,这些函数具有关联的行为更改: |
调用 GetCaps 时,以下方案适用:
|
这些 Direct3D 11 函数具有关联的行为更改: |
|
调用资源创建、映射和取消映射函数的行为更改
对于 WDDM 1.3 及更高版本驱动程序实现的这些函数,Direct3D 运行时为映射默认方案提供一组受限的输入值。 这些受限值仅适用于支持功能级别 11.1 及更高版本的驱动程序。
这些输入 D3D11DDIARG_CREATERESOURCE 结构成员受到限制:
成员 | 说明 |
---|---|
ResourceDimension 和 使用情况 |
仅当 Direct3D 运行时为 ResourceDimension 提供类型D3D10DDIRESOURCE_BUFFER和类型D3D10_DDI_USAGE_DEFAULT以供使用时,这些行为更改才适用。 |
BindFlags |
Direct3D 运行时仅设置 D3D10_DDI_BIND_SHADER_RESOURCE 和 D3D11_DDI_BIND_UNORDERED_ACCESS 值。 |
MapFlags |
如果满足此处列出的所有其他成员要求,则运行时可以设置 D3D10_DDI_MAP_READ、 D3D10_DDI_MAP_WRITE和 D3D10_DDI_MAP_READWRITE 值。 驱动程序必须支持这些值。 D3D10_DDI_MAP_WRITE_DISCARD和D3D10_DDI_MAP_WRITE_NOOVERWRITE的值无效。 |
MiscFlags |
运行时仅设置 D3D11_DDI_RESOURCE_MISC_BUFFER_ALLOW_RAW_VIEWS 和 D3D11_DDI_RESOURCE_MISC_BUFFER_STRUCTURED 值。 |
格式 |
运行时仅设置 DXGI_FORMAT_UNKNOWN 值。 |
SampleDesc |
运行时设置 DXGI_SAMPLE_DESC。将成员计数 为 1, 将质量 成员计数为零。 |
MipLevels |
运行时将值设置为 1。 |
ArraySize |
运行时将值设置为 1。 |
pPrimaryDesc |
运行时将值设置为 NULL。 |
ResourceMap函数 —
ResourceMap 的以下输入参数受到限制:
参数 | 说明 |
---|---|
hResource |
当在 CreateResource (D3D11 ) 创建调用中设置 MapFlags 的非零值时,Direct3D 运行时仅设置D3D10DDIRESOURCE_BUFFER资源。 |
运行时仅设置 DXGI_FORMAT_UNKNOWN 值。 |
|
子资源 |
运行时仅将值设置为 0。 |
DDIMap |
如果满足此处列出的所有其他成员要求,则运行时可以设置D3D10_DDI_MAP_READ、D3D10_DDI_MAP_WRITE或D3D10_DDI_MAP_READWRITE值,这与 CreateResource (D3D11) 创建调用中设置的 MapFlags 值相匹配。 |
标志 |
尽管运行时的输入值不受限制,但驱动程序必须能够支持 D3D10_DDI_MAP_FLAG_DONOTWAIT 值。 |
pMappedSubResource |
尽管运行时的输入值不受限制,但驱动程序必须将有效的 CPU 可缓存指针分配给 D3D10DDI_MAPPED_SUBRESOURCE。pData 成员 和 必须设置 RowPitch 和 DepthPitch 以匹配缓冲区的大小和 pData 中提供的数据。 |
ResourceUnmap函数 —
ResourceUnmap 的以下输入参数受到限制:
参数 | 说明 |
---|---|
hDevice |
尽管 Direct3D 运行时的输入值不受限制,但与原始 ResourceMap 调用中的 hDevice 值匹配的值。 |
hResource |
当在 CreateResource (D3D11 ) 创建调用中设置 MapFlags 的非零值时,运行时仅设置一个D3D10DDIRESOURCE_BUFFER资源。 |
子资源 |
运行时仅将值设置为 0。 |