在 mantle、dx 和 ogl 上的表现
Posted
技术标签:
【中文标题】在 mantle、dx 和 ogl 上的表现【英文标题】:performance on mantle, dx and ogl 【发布时间】:2015-02-22 15:38:13 【问题描述】:最近,新的 3d 图形 API 引起了轰动,据说它可以极大地加速图形,我想知道为什么以前没有这样做过。旧方式和新方式有什么不同?
我想知道它是如何实现的,甚至想知道它是如何工作的,从 gpu 到驱动程序再到 DX 或 OGL 的 API。
【问题讨论】:
我认为你问的问题太宽泛了。我建议只专注于一件事(例如,为什么 Mantle 应该比 DirectX 或 OpenGL 更快)以获得有意义的答案。 Mantle 不会做任何 DirectX 和 OpenGL 最终不会通过扩展做的事情。这或多或少是降低 API 开销的权宜之计,具有讽刺意味的是,它似乎只对在 AMD CPU 上运行的 CPU 密集型应用程序有效。 我假设 mantle、dx12 和 ogl 接下来都做同样的事情。这是错的吗? 你是对的,但 Mantle 在应用程序和驱动程序之间有一个更薄的层。即将推出的 DirectX 12 将提供类似于 Mantle 的功能,glNext 也将提供类似的功能,这(显然)Valve 将于 2015 年 3 月 5 日在 GDC 上推出。 您知道这些 API 中的一些 3D 编程吗?如果是这样,您可以在这里查看低级 GPU API 的工作原理research.ncl.ac.uk/game/mastersdegree/workshops/… 我怀疑 glNext 会不会是这样(特别是必须手动对齐纹理的想法),但它可以让您很好地了解兔子洞有多远去:D 【参考方案1】:发生的主要事情是 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 中要多得多,因为应用程序本身必须完成使用的所有单独步骤在运行时“通过魔术”完成。这让应用程序/游戏可以调整确切的顺序,并可能跳过它们实际上不需要的步骤,但它在它们身上而不是运行时来实现。
引用Uncle Ben,能力越大,责任越大。
多年来,开发人员一直坚称他们想要在 PC 上使用“类似控制台”的 API,所以现在他们将确定他们是否真的想要它。对于游戏引擎作者、带有自定义引擎的 AAA 游戏以及技术演示场景来说,能够对硬件进行如此多的几乎直接的控制真是太酷了。对于普通人来说,使用一段时间的 DirectX 11 或使用已经实现 DirectX 12 的引擎会容易得多。
【讨论】:
我不确定我是否同意使用 DirectX 11 会更容易。在我看来,一旦你掌握了窍门,DirectX 12 会简单得多,涉及的“fu”也会少得多的基本原则。 在 DX12 中基本上没有“魔法”发生,但相反,除非您明确地这样做,否则不会发生任何事情。对于某些人来说,DX12 将是合乎逻辑的选择,这对他们来说非常棒。对于其他人来说,DX11 在生产力和易用性方面更有意义。而对于其他许多人来说,Unity、Monogame、UE 等一些更高级的工具更有意义。 我希望教程和模板能够全面涵盖基础知识。自 OpenGL1.1 和 D3D 6.0 以来,我一直在与样板作斗争。我想人们会在新 API 之上编写基本库以在任何情况下进行简化。 当然,随着时间的推移,DirectX 12 将得到更好的支持——我最终将通过 DirectX 工具包获得对它的支持——但与使用 DirectX 相比,你仍然会面临更多的限制和尽职调查11. 在极限情况下,实现 DirectX 11 对 DX12 的所有可用性支持的库是...... DirectX 11。 几乎可以肯定不会是这样,不。【参考方案2】:要了解从 gpu 到驱动程序再到 API 的工作原理,您可以从 Graphics Pipeline 开始
【讨论】:
我们如何检查谁对响应投了反对票或赞成票?以上是关于在 mantle、dx 和 ogl 上的表现的主要内容,如果未能解决你的问题,请参考以下文章
TBDR下msaa 在metal vulkan和ogles的解决方案