本文只是对官方文档做出简单的翻译 原文地址:Using Direct3D 11 feature data to supplement Direct3D feature levels
了解如何检查设备对可选功能的支持,包括在Windows的最新版本中添加的功能。
Direct3D feature levels 指示定义良好的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设备支持feature level 11.1,则SAD4ShaderInstructions 和 ExtendedDoublesShaderInstructions会自动支持 D3D11_FEATURE_DATA_D3D11_OPTIONS指示的所有可选功能。
运行时始终将以下成员分组设置相同。也就是说,分组中的所有值一起为TRUE 或 FALSE:
- 丢弃APISeenByDriver和FlagsForUpdateAndCopySeenByDriver
- ClearView,CopyWithOverlap,ConstantBufferPartialUpdate,ConstantBufferOffsetting和MapNoOverwriteOnDynamicConstantBuffer
- MapNoOverwriteOnDynamicBufferSRV和MultisampleRTVWithForcedSampleCountOne
feature level 11.2选项(D3D11_FEATURE_D3D11_OPTIONS1):此字段指示的可选功能是独立的,必须单独检查。
Windows RT 8.1和Windows Phone 8.1设备上的功能支持
Windows RT平板设备可以支持各种功能级别和可选功能,经过优化以降低功耗,并使用集成的图形而不是独立的GPU。用于ARM设备的Windows应用商店应用必须支持feature level 9.1。适用于Windows RT的DirectX应用程序应利用可选功能,这些功能可在可用时节省电源和周期(例如,简单的实例化)。
Windows Phone 8移动设备支持具有特定可选功能的feature level 9.3。请参阅Direct3D feature level 9_3 for Windows Phone 8。
Direct3D 11的可选功能是什么?
本文的其余部分描述了Direct3D 11.2中可用的可选功能。按添加的时间顺序排列功能,以便您了解Direct3D 11的不同版本中的功能。
功能级别10的可选计算着色器支持
以下功能始终可用于feature level 10的设备:
D3D11_FEATURE_DATA_D3D10_X_HARDWARE_OPTIONS: 如果为TRUE,则设备支持计算着色器。这包括对原始和结构化缓冲区的支持。
当feature level 10_0或10_1设备支持此功能时,不能保证该设备支持计算着色器4.1。如果 ID3D11Device::CreateComputeShader 引发计算着色器4.1程序异常,则应用应准备好使用计算着色器4.0。
功能级别9的可选功能
从Windows 8开始,为feature level 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开始为feature level 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。
对于feature level 9的设备,顶点着色器的最低精度可能不同于像素着色器。顶点着色器的精度在AllOtherShaderStagesMinPrecision字段中指示。
D3D11_FEATURE_DATA_DOUBLES: feature level 11的设备可以在shader model 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 :: DiscardAPIsSeenByDriver:您可以在开发过程中监视此成员,以排除硬件驱动程序上的旧驱动程序,否则,DiscardView 和 DiscardResource可能会有所帮助。
D3D11_FEATURE_DATA_MARKER_SUPPORT: 如果硬件和驱动程序支持GPU配置文件的数据标记,则支持此功能。