DirectX 12 自定义实现是否与 DirectX 11 相同?

Does DirectX 12 custom implementation will same as DirectX 11?

我正在阅读 "Practical rendering with DirectX 11" 并希望在深入了解 DirectX 概念后编写一个简单的引擎。

但今天我们有了 DirectX 12,它解决了驱动程序开销问题(因为我们更接近硬件),我正在考虑使用 12 作为我的主要渲染器。但是我的引擎会在开发结束时成为某种驱动程序开销吗?我认为驱动程序开发人员比我聪明得多,所以我可以让 12 的渲染速度比 11 慢。对吧?

DirectX 11 和 DirectX 12 以不同的方式解决了同样的问题。它们都驱动相同的硬件并可以访问相同的硬件功能。区别在于 CPU 和内存的管理方式。

对于 DirectX 11,API 是 "low-level",但 DirectX 运行时管理视频内存,协调资源 upload/download,处理缓冲区重命名,并确保 GPU 和CPU.

对于 DirectX 12,DirectX 运行时做的事情很少,应用程序负责 一切 DirectX 11 运行时会为您处理的事情。这对于允许应用程序更多地控制硬件的驱动方式非常强大,但这意味着即使在异常情况下和广泛的范围内,程序员也有责任让一切正确硬件。

图形编程和调试已经是一个挑战,使用 DirectX 12 会使它因时序问题而变得非常复杂(类似于您在进行多线程 lockfree 编程时可能遇到的各种风险),更因供应商而异需要更多测试验证的行为、可能在多个帧上发生的资源管理问题,以及对所有可编程着色器如何管理与 PCU 共享的信息的更多责任。

如果您不熟悉使用 DirectX 进行图形编程,那么我强烈建议您使用 DirectX 11。即使您最终使用 DirectX 12 有意义,API 设计和文档也假定您已经是 DirectX 11 编程和 HLSL 方面的专家。一旦您成为 DirectX 11 的专家,那么将 DirectX 12 用于您的特定项目可能仍然没有意义,除非您发现 DirectX 11 API 的 CPU 开销确实是一个瓶颈。对于主要对学习 技术 感兴趣的人来说,两者都值得学习,但您应该首先牢牢掌握 DirectX 11。

还需要注意的是,DirectX 11 和 DirectX 12 具有不同的系统要求。 Windows 7、Windows 8.1 支持 DirectX 11,和 Windows 10 并需要 WDDM 1.x 驱动程序,这些驱动程序广泛用于 Direct3D hardware feature level 9.1 到 11.1 的视频硬件。 Windows 10(包括 Xbox One)支持 DirectX 12,并且需要并非适用于所有视频硬件的 WDDM 2.0 驱动程序。 WDDM 2.0 驱动程序可广泛用于大多数 Direct3D 功能级别 11.0 或更高版本的硬件,这是 "core PC gamers" 市场上的大多数 GPU,但不适用于商业设置或旧 PC 游戏系统中使用的大量视频卡。

现在 'sweet spot' 如果您正在编写游戏并且拥有一支经验丰富的图形开发团队,那么使用 DirectX 12 是可行的;面向控制台、'core' PC 游戏玩家、and/or 通用 Windows 桌面平台 (UWP);并期待游戏 CPU 绑定。

请参阅 DirectX 工具包 DirectX 11 and DirectX 12