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

标签 c++ directx directx-11 directx-12

我正在阅读“DirectX 11 的实用渲染”,并且想在深入了解 DirectX 概念后编写一个简单的引擎。

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

最佳答案

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

对于 DirectX 11,API 是“低级”的,但 DirectX 运行时管理视频内存、协调资源上传/下载、处理缓冲区重命名,并确保 GPU 和 CPU 之间的正确同步。

对于 DirectX 12,DirectX Runtime 做的事情很少,应用程序负责 DirectX 11 Runtime 为您处理的一切。这对于允许应用程序更好地控制硬件的驱动方式非常强大,但这意味着程序员有责任确保一切正确,即使在异常情况下和在各种硬件上也是如此。

图形编程和调试已经是一个挑战,使用 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 和 Windows 10 支持 DirectX 11,并且需要广泛使用的 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 或更高版本的硬件,这是市场上面向“核心 PC 游戏玩家”的大多数 GPU,但不适用于商业设置或旧 PC 游戏系统中使用的大量视频卡。

现在使用 DirectX 12 的“最佳点”是您正在编写游戏并且拥有一支经验丰富的图形开发人员团队;针对控制台、“核心”PC 游戏玩家和/或桌面通用 Windows 平台 (UWP);并期望游戏受 CPU 限制。

请参阅 DirectX 工具包 DirectX 11DirectX 12

关于c++ - DirectX 12 自定义实现是否与 DirectX 11 相同?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41097857/

相关文章:

c++ - 关于数据包和缓冲区大小的 TCP 套接字编程

c++ - 如何找到字体的宽度?

opengl - 有什么方法可以在 hlsl/glsl 片段着色器中通过图元获得片段(像素)的百分比覆盖率?

visual-c++ - DirectX 11.1 尝试创 build 备以不触发超时检测恢复

c++ - DirectX 使用多个渲染目标作为彼此的输入

c++ - vector<unique_ptr> 的初始化因复制错误而失败

c++ - Eigen 库中的稀疏稀疏积 A^T*A 优化

directx - 从 DX11.1 后的文件加载纹理?

C# 获取屏幕平均颜色的最快方法

c++ - QTabWidget 选项卡在垂直方向,但文本在水平方向