所以最近在新的 3d 图形 API 上引起了轰动,据说它可以大大加速图形,我想知道为什么以前没有这样做过。旧方式和新方式有什么不同?
我想知道它是如何实现的,甚至想知道它是如何从 gpu 到驱动程序再到 DX 或 OGL 的 API 工作的。
发生的主要事情是 GPU 本身已经变得非常标准化,即使在不同的供应商之间也是如此。历史上,DirectX 和 OpenGL 一直在努力隐藏不同供应商的 GPU 设计之间的差异,其中许多在过去具有截然不同的硬件架构——OpenGL 一直是与所有这些数以万计的供应商相比更加“泄漏”的抽象- 特定的扩展。
DirectX 12 和 Mantle 都比过去公开了更多的 GPU 底层行为,因此运行时库是底层驱动程序的一个更薄的抽象。这种方法并不适用于所有视频卡,尤其是传统 DirectX 和 OpenGL 可以支持的许多较旧的视频卡 - OpenGL 承载了几十年前的巨大传统支持尾巴。自 DirectX 早期以来,为 DirectX 10 和 DirectX 11 标准化 GPU 功能的推动使来自不同供应商的消费级 PC 图形硬件变得不那么古怪。
要记住的另一件事是,这种权衡还需要更多的应用程序/游戏本身来正确处理 CPU/GPU 同步,有效地驱动硬件,跟踪和详尽地描述它们使用的状态组合,以及一般操作几乎没有运行时的安全和支持。
与如今的 DirectX 11 或 OpenGL 相比,编写 DirectX 12 应用程序需要更多的图形编程技能。在 Direct3D 9 中设置设备/交换链和简单的渲染场景可能需要几十行代码,在 Direct3D 11 中需要几百行代码,但在 DirectX 12 中要多得多,因为应用程序本身必须完成使用的所有单独步骤在运行时“通过魔术”完成。这让应用程序/游戏可以调整确切的顺序,并可能跳过它们实际上不需要的步骤,但它在它们之上,而不是运行时来实现。
引用本叔叔的话,能力越大,责任越大。
多年来,开发人员一直坚持他们想要在 PC 上使用“类似控制台”的 API,所以现在他们将确定他们是否真的想要它。对于游戏引擎作者、带有自定义引擎的 AAA 游戏以及技术演示场景来说,能够对硬件进行如此多的几乎直接的控制真是太酷了。对于普通人来说,使用 DirectX 11 一段时间或使用已经实现 DirectX 12 的引擎会容易得多。
有关从 gpu 到驱动程序到 API 的工作原理的概述,您可以从这个图形管道开始