在地幔、dx 和 ogl 上的表现

performance on mantle, dx and ogl

最近,随着 3d 图形的新 API 的所有骚动,据称可以大大加速图形,我想知道为什么以前没有这样做。旧方法和新方法有什么不同?

我想知道它是如何实现的,甚至可能概述它是如何从 gpu 到驱动程序再到 DX 或 OGL 的 API。

要了解从 gpu 到驱动程序再到 API 的工作原理,您可以从这个 Graphics Pipeline

开始

发生的主要事情是 GPU 本身已经变得非常标准化,甚至在各个供应商之间也是如此。 DirectX 和 OpenGL 在历史上花费了大量精力来隐藏不同供应商 GPU 设计之间的差异,其中许多在过去具有截然不同的硬件架构——OpenGL 一直是一个非常 'leakier' 的抽象,拥有无数的东西特定于供应商的扩展。

DirectX 12 和 Mantle 都暴露了比过去更多的 GPU 底层行为,因此运行时库是对底层驱动程序的更薄的抽象。这种方法并不适用于所有视频卡,尤其是许多传统 DirectX 和 OpenGL 可以支持的旧视频卡——OpenGL 在几十年前就拥有大量的传统支持。自 DirectX 早期以来,为 DirectX 10 和 DirectX 11 规范化 GPU 功能的努力使得来自不同供应商的消费级 PC 图形硬件变得不那么古怪了。

另一件要记住的事情是,这种权衡也需要更多的 application/game 本身来正确处理 CPU/GPU 同步,有效地驱动硬件,跟踪和详尽描述他们使用的状态组合,并且通常在运行时几乎没有安全级别和支持的情况下运行。

今天编写 DirectX 12 应用程序需要比 DirectX 11 或 OpenGL 更多的图形编程技能。在 Direct3D 9 中设置一个 device/swapchain 和简单的渲染场景可能需要几十行代码,在 Direct3D 11 中需要几百行,但在 DirectX 12 中要多得多,因为应用程序本身必须执行所有单独的步骤过去在运行时 'by magic' 完成。这允许 applications/games 调整确切的顺序,并可能跳过他们实际上不需要的步骤,但它在他们身上而不是运行时才能实现。

引用Uncle Ben能力越大责任越大。

开发人员多年来一直坚持他们想要 'Console-like' API 在 PC 上,所以现在他们会发现他们是否真的想要它。对于游戏引擎作者、带有自定义引擎的 AAA 游戏和技术演示场景来说,能够近乎直接地控制硬件真是太酷了。对于凡人来说,使用 DirectX 11 一段时间或使用已经实现 DirectX 12 的引擎会容易得多。