2008 年 11 月 Direct3D 11 技术预览版中的新增功能

此版本的 Direct3D 11 包含新功能、工具和文档。

说明
镶嵌
Direct3D 11 提供额外的管道阶段,以支持高阶基元的 实时分割 。 凭借广泛可编程的功能,此功能允许使用许多不同的方法来评估高阶表面,包括使用近似技术、贝塞尔贴图、自适应细化和位移映射的细分图面。 此功能仅在 Direct3D 11 类硬件上可用,因此若要评估此功能,需要使用参考光栅器。 有关操作中的细化演示,检查通过示例浏览器提供的 SubD11 示例。
计算着色器
计算着色器是独立于 Direct3D 11 管道的附加阶段,用于在 GPU 上启用常规用途计算。 除了统一着色器核心提供的所有着色器功能外,计算着色器还支持通过无序访问视图、一组执行线程中的共享内存池、同步基元、原子运算符和许多其他高级数据并行功能对资源进行分散读取和写入。 此版本中已启用 Direct3D 11 计算着色器的变体,该变体可在 Direct3D 10 类硬件上运行。 因此,可以在实际硬件上开发计算着色器,但需要更新的驱动程序。 Direct3D 11 计算着色器的完整功能旨在支持 Direct3D 11 类硬件,因此为了评估完整功能,需要使用参考光栅器,直到此类硬件可用。 有关运行中的计算着色器的演示,检查通过示例浏览器提供的 HDRToneMappingCS11 示例。
多线程渲染
在 Direct3D 11 中,与 Direct3D 10 的主要 API 区别在于添加了 延迟上下文,从而可以缩放地执行分布在多个核心上的 Direct3D 命令。 延迟上下文捕获并组合状态更改和绘制提交等操作,这些操作稍后可在实际设备上执行。 通过在多个线程上使用延迟上下文,应用程序可以将 Direct3D11 运行时和驱动程序中所需的 CPU 开销分配到多个核心,从而更好地使用最终用户的计算机配置。 此功能可用于当前 Direct3D 10 硬件以及参考光栅器。 有关 API 用法的演示,检查通过示例浏览器提供的 MultithreadedRendering11 示例。
动态着色器链接
为了解决在专用着色器以提高性能时出现的组合爆炸问题,Direct3D 11 引入了一种有限形式的运行时 着色器链接 ,允许在执行应用程序期间实现近乎最佳的着色器专用化。 这是通过在着色器分配给管道时在着色器代码中指定特定函数的实现来实现的,从而允许驱动程序快速内联本机着色器指令,而不是强制驱动程序使用新配置将中间语言重新编译为本机指令。 着色器开发是通过向 HLSL 引入类和接口公开的。 对于演示,检查通过示例浏览器提供的动态着色器链接 11 示例。
Windows 高级光栅器 (WARP)
WARP 通过 Direct3D 11 和最终通过 Direct3D 10.1 在此 SDK 中提供,是一种快速的多核缩放光栅器,完全符合 Direct3D 10.1 要求。 利用此技术与在创建设备时传递D3D_DRIVER_TYPE_WARP标志一样简单。
Direct3D 9 硬件上的 Direct3D 10 和 Direct3D 11 (D3D10 级别 9)
Direct3D API 通过 Direct3D 11 和最终通过 Direct3D 10.1 提供在此 SDK 中,可以面向大多数 Direct3D 9 硬件以及 Direct3D 10、Direct3D 10.1 和 Direct3D 11 硬件。 这是通过提供功能级别机制来实现的,该功能级别机制根据功能将硬件分为六个类别:9_1、9_2、9_3、10_0、10_1 和 11_0。 仅当卡完全符合某个功能级别时才满足该功能级别,并且每个级别都是低于该功能级别的严格超级集。 对功能进行最小模拟,以确保不会遇到意外的性能悬崖。 因此,几何着色器等功能不适用于 Direct3D 9 级别目标。
运行时二进制文件
将在 Windows 7 和 Windows Vista SP1 上提供的 Direct3D 11 技术预览版中提供的所有运行时二进制文件都随 SDK 一起安装, (标记为“Beta”组件,即D3D11_beta.DLL) 。 所有带有 beta 标签的组件都经过时间轰炸。 若要创建项目来评估这些新组件,必须链接到其等效的 beta 标记的导入库 (即 D3D11_beta.lib) 。 如果你有 Windows 7 的 PDC 副本,则 Windows SDK 中随版本提供的标头、库和 pdbs 适用于使用 Windows 7 中提供的 Direct3D 11 组件进行开发。 请将此 SDK 中的标头、库和 pdbs 的使用保留给此处提供的 beta 组件。
D3DX11
D3DX11 目前支持 Direct3D 11 资源的纹理加载、着色器编译、数据加载和工作线程函数。 将来,此组件将提供 D3DX10 中可用的更多技术。 着色器编译功能也直接通过 Direct3D 编译器组件提供,如下所述。
HLSL 和 Direct3D 编译器
HLSL 编译器具有多个新功能,用于支持 Direct3D 11 中提供的新技术。 这包括通过接口和类进行面向对象的编程、用于资源加载的直接索引语法,以及确保使用特定变量执行的所有操作都遵循严格的浮点规则的“精确”关键字 (keyword) 。 几乎所有新的语言功能在现有着色器目标上都具有有效的功能。 除了支持所有 Direct3D 9、Direct3D 10、Direct3D 10.1 和 Direct3D 11 着色器外,HLSL 编译器还支持为 Direct3D 10 级别 9 目标编写着色器所需的特殊目标。 现在可通过 D3DCompiler.H 和 D3DCompiler.lib 在 D3DX10 和 D3DX11 外部直接访问 D3D 编译器。 对于这些新文件,应用程序无需链接到 D3DX 即可执行运行时编译;如果只需要 D3DX 功能,则不需要应用程序包含编译器。
D3D11 参考光栅器
参考光栅器提供黄金标准的光栅化实现,用于评估硬件中尚不可用的 Direct3D 11 功能。 还提供了参考光栅器,用于验证特定硬件实现对光栅化标准的准确性。 参考光栅器旨在实现正确性,而不是性能。 若要创建引用设备,只需在创建设备时传递 D3D_DRIVER_TYPE_REFERENCE 标志。
D3D11 SDK 层
Direct3D11 SDK 层提供了一种机制,用于在开发过程中跟踪 Direct3D 11 运行时的操作。 目前,它用于提供有用的调试信息,其中不仅包括有关不当使用的错误,还包括建议使用运行时的最佳做法的警告,并且通常提供用于调试的深入有用信息。 强烈建议在开发期间随时打开 D3D11 SDK 层的调试输出,并且应用程序在执行期间不会生成调试输出,然后再将其释放或与 PIX for Windows 配合使用进行分析。 启用调试层就像在创建设备时传递D3D11_CREATE_DEVICE_DEBUG标志一样简单。 强烈建议开发人员在调试版本中使用层。 不建议在配置文件或发布版本中使用层。
新示例
此版本有四个新示例。
  • 动态着色器链接 11 示例演示了在运行时使用着色器模型 5 着色器接口和 Direct3D 11 支持来链接着色器接口方法。
  • HDRToneMappingCS11 示例演示如何在) 上设置和运行计算着色器 (CS,这是 Direct3D 11 最令人兴奋的新功能之一。 尽管此示例仅利用 CS 来实现 HDR 音调映射,但该概念应轻松扩展到其他后期处理算法以及更常规的计算。
  • MultithreadedRendering11 示例演示了如何在多个线程之间拆分呈现,开销非常低。
  • 新的 SubD11 示例与 DirectX SDK 中的 SubD10 示例非常相似,只不过它已得到增强以利用三个新的 Direct3D 11 管道阶段:外壳着色器、细化器和域着色器。

以前版本中引入的功能