我正在阅读“使用DirectX 11进行实际渲染”,并希望在深入了解DirectX概念后编写一个简单的引擎。
但是今天我们有DirectX 12解决了驱动程序开销问题(因为我们更接近硬件)而且我正在考虑使用12作为我的主要渲染器。但是我的引擎会在开发结束时成为某种驱动程序开销吗?我认为驱动程序开发人员比我更聪明,所以我可以让12渲染速度慢于11。对吗?
答案 0 :(得分:4)
DirectX 11和DirectX 12以不同的方式解决了同样的问题。它们都可以驱动相同的硬件,并可以访问相同的硬件功能。不同之处在于如何管理CPU和内存。
使用DirectX 11,API是"低级"但DirectX Runtime管理视频内存,协调资源上传/下载,处理缓冲区重命名,并确保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 11和DirectX 12的 DirectX工具包