使用 Direct3D 11 功能数据补充 Direct3D 功能级别

了解如何检查设备对可选功能的支持,包括最新版本的 Windows 中添加的功能。

Direct3D 功能级别 表示定义完善的 GPU 功能集,这些功能大致对应于不同代系的图形硬件。 这大大简化了检查硬件上限的任务,并在各种不同设备上提供一致的体验。

为了考虑不同硬件实现(包括旧硬件、移动硬件和新式硬件)之间的一些差异,某些功能被视为可选功能。 可以通过调用 ID3D11Device::CheckFeatureSupport 并提供相关的D3D11_FEATURE_DATA_* 结构来确定对这些功能的支持。 本主题介绍各种可选的 Direct3D 11 功能,其中一些功能如何协同工作,以及如何避免检查每个可选功能。

如何检查可选功能支持

调用 ID3D11Device::CheckFeatureSupport,提供表示要使用的可选功能的结构。 如果 方法返回 S_OK,则表示你使用的是支持可选功能的 Direct3D 运行时版本。 如果返回 E_INVALIDARG,则表示你在添加可选功能之前使用的是 Direct3D 11 运行时版本 - 这意味着该可选功能不可用,以及同一版本的 Direct3D 11 或更高版本中引入的任何其他可选功能。

是否可以最大程度地减少功能支持检查所需的工作?

除了具有正确的 Direct3D 11 运行时 (通常与 Windows 版本) 图形驱动程序还必须足够新,以支持可选功能。 如果硬件可以支持,WDDM 规范需要支持可选功能。 因此,当图形驱动程序支持在 Windows 的特定版本中添加的可选功能之一时,这通常意味着图形驱动程序支持在该版本的 Windows 中添加的其他功能。 例如,如果设备驱动程序支持功能级别 9 上的阴影,则你知道设备驱动程序至少为 WDDM 1.2。

注意如果 Microsoft Direct3D 设备支持功能级别 11.1,则除 SAD4ShaderInstructionsExtendedDoublesShaderInstructions 外,将自动支持 D3D11_FEATURE_DATA_D3D11_OPTIONS 指示的所有可选功能。

运行时始终以相同的方式设置成员的以下分组。 也就是说,分组中的所有值一起为 TRUEFALSE

  • DiscardAPIsSeenByDriverFlagsForUpdateAndCopySeenByDriver
  • ClearViewCopyWithOverlapConstantBufferPartialUpdateConstantBufferOffsettingMapNoOverwriteOnDynamicConstantBuffer
  • MapNoOverwriteOnDynamicBufferSRVMultisampleRTVWithForcedSampleCountOne

功能级别 11.2 选项 (D3D11_FEATURE_D3D11_OPTIONS1) : 此字段指示的可选功能是独立的,必须单独检查。

Windows RT 8.1 和 Windows Phone 8.1 设备上的功能支持

Windows RT平板电脑设备可以支持各种功能级别和可选功能,经过优化以降低能耗,并使用集成图形而不是离散 GPU。 适用于 ARM 设备的 Windows 应用商店应用必须支持功能级别 9.1。 适用于Windows RT的 DirectX 应用应利用可选功能,这些功能可在可用时节省电源和周期,例如简单的实例化。

Windows Phone 8 个移动设备支持具有特定可选功能的功能级别 9.3。 有关 Windows Phone 8,请参阅 Direct3D 功能级别 9_3

什么是 Direct3D 11 可选功能?

本文的其余部分介绍 Direct3D 11.2 中提供的可选功能。 按添加时间按时间顺序描述功能,以便你可以了解不同版本的 Direct3D 11 中有哪些功能。

功能级别 10 的可选计算着色器支持

以下功能始终可用于功能级别 10 的设备:

D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS 如果为 TRUE,则设备支持计算着色器。 这包括对原始缓冲区和结构化缓冲区的支持。

当功能级别 10_0 或 10_1 设备支持此功能时,不保证设备支持计算着色器 4.1。 如果 ID3D11Device::CreateComputeShader 使用计算着色器 4.1 程序引发异常,应用应准备好回退到计算着色器 4.0。

功能级别 9 的可选功能

从 Windows 8 开始,为功能级别 9 添加了以下功能:

D3D11_FEATURE_DATA_D3D9_OPTIONS 指示支持使用非幂 2 纹理包装纹理寻址。 如果支持此功能,D3D11_TEXTURE_ADDRESS_MODE_WRAP可用于此类纹理。

D3D11_FEATURE_DATA_D3D9_SHADOW_SUPPORT 指示支持着色器模型 4.0 功能级别9_x着色器中的比较采样器。 这用于像素着色器中的深度测试,从而支持阴影映射和模具等常见技术。

从 Windows 8.1 开始,为功能级别 9 设备添加了以下功能:

D3D11_FEATURE_DATA_D3D9_SIMPLE_INSTANCING_SUPPORT 指示支持 DirectX 9 级硬件上可能提供的简单实例化功能。 简单实例化意味着用于定义输入布局的D3D11_INPUT_ELEMENT_DESC结构的所有 InstanceDataStepRate 成员都必须等于 1。 支持功能级别 9.3 或更高版本的设备已包含对实例化的完全支持。

着色器程序的可选浮点精度支持

D3D11_FEATURE_DATA_SHADER_MIN_PRECISION_SUPPORT 启用最小精度时,此结构中的字段指示浮点数的长度;如果仅支持完整的 32 位浮点精度,则为 0。

对于功能级别 9 设备,顶点着色器的最小精度可能不同于像素着色器。 顶点着色器的精度在 AllOtherShaderStagesMinPrecision 字段中指示。

D3D11_FEATURE_DATA_DOUBLES 功能级别 11 设备可以在着色器模型 5.0 程序中支持双精度计算。 支持着色器中的双精度计算意味着可以在计算着色器程序中将浮点转换为双精度计算,从而在每个着色器通道中提供更高精度计算的优势。 在写入输出缓冲区之前,必须将双精度数字转换回浮点数。 请注意,不一定支持双精度除法。

Direct3D 11.2 的其他功能

Direct3D 11.2 添加了 Direct3D 11 设备可支持的四项新的可选功能。 这些功能采用 D3D11_FEATURE_DATA_D3D11_OPTIONS1 结构:

TiledResourcesTier: 指示对平铺资源的支持,并指示支持的层级别。

MinMaxFiltering: 指示支持D3D11_FILTER_MINIMUM_* 和 D3D11_FILTER_MAXIMUM_* 筛选选项,这些选项将筛选结果与最小 (或最大) 值进行比较。 请参阅 D3D11_FILTER

ClearViewAlsoSupportsDepthOnlyFormats: 指示支持清除深度缓冲区资源视图。

MapOnDefaultBuffers: 指示支持映射使用 D3D11_USAGE_DEFAULT 标志创建的呈现目标缓冲区。

基于磁贴的呈现

D3D11_FEATURE_DATA_ARCHITECTURE_INFO 指示图形设备是否批处理呈现命令,并默认执行基于磁贴的呈现。 这可以用作图形引擎优化的提示。

开发和调试的可选功能

D3D11_FEATURE_DATA_D3D11_OPTIONS::D iscardAPIsSeenByDriver: 可以在开发期间监视此成员,以排除 在放弃视图DiscardResource 本来可能有益的硬件上的旧驱动程序。

D3D11_FEATURE_DATA_MARKER_SUPPORT 如果硬件和驱动程序支持 GPU 分析的数据标记,则支持此功能。

设备