我怎么知道,更新的 openGL 包括一些由供应商定义并使用硬件功能的扩展。我有 geforce 520m(2010 年实现),但它支持 openGL 4.4(2014 年实现)。显然,它不能支持 openGL 4.4 中需要的一些硬件特性。但是它支持openGL 4.4。旧显卡如何支持新的openGL版本?
2 回答
为什么你认为它不支持硬件功能?确实如此。OpenGL 是一种渲染 API规范,而不是硬件规范。将新功能添加到 GL 的事实并不意味着需要新的硬件来实现它们。
在 nvidia 上,自 fermi 架构以来的所有 GPU 都支持 OpenGL 4.x,只要它已指定。这并不能保证它将支持未来 GL4.x 版本可能引入的所有内容。
目前,GL 主要版本可以绑定到一些主要的硬件生成。GL2.x 是真正的老东西。自 GeForce 8xxx(2006 年发布)以来,nvidia 支持 GL 3.x,fermi/kepler/maxwell 支持 4.x。
据你说,自费米架构以来,视频卡的进展就停止了。如果厂商可以更新openGL添加新功能,为什么还要实现新的显卡?我认为这是不真实的。供应商试图找到在硬件级别加速视频卡的方法并添加使用它的功能。还是我没看清楚?那么我的显卡支持openGL 4.x是什么意思呢?
不,你把它弄反了。
你可以说图形 API 在硬件功能方面的进展自费米以来就停止了。每一代新一代的 GPU 一般都会增加新的硬件特性,但每一个新版本的 OpenGL 所暴露的特性并不一定需要新的硬件。事实上,核心 GL 在所需功能方面通常比硬件功能落后一代或更多。
OpenGL 仍然缺乏对 Direct3D 11 中引入的某些功能的支持,同样,Direct3D 11.x 缺乏对某些 OpenGL 4.x 功能的支持,并且这两个 API 都没有完全公开底层硬件。这是因为它们的设计是围绕支持尽可能多的硬件而不是一个特定硬件的所有功能而设计的。AMD 对这个“问题”的解决方案是引入一个全新的 API(Mantle),它更接近于他们基于Graphics Core Next的架构的特性集;更多的是 API 设计的控制台方法。
每年发布的新 GL 版本规范可能会引入可选的 ARB 扩展,但在它们升级为核心之前,GL 不需要支持它们。
在 ARB 的所有供应商之间实现标准化之前,GPU 硬件的某些功能在核心 GL 中是无法使用的。这就是为什么 GL 除了核心版本之外还有扩展。720m GPU 将支持您的 520m GPU 不支持的许多新扩展,但同时它们都可以实现 GL 4.4 所需的所有功能。但是,不能保证 GL 4.5 不会引入一些您的 520m GPU 无法支持或 NV 认为支持太麻烦的新必需功能。
供应商有时不会费心为旧 GPU 上的功能编写支持,即使他们可以在技术上支持它们。编写工作量太大,尤其是要跨产品线的多个不同版本维护一个功能的多个实现。您在所有行业中都可以看到这种情况,而不仅仅是 GPU。有时开源解决方案最终会填补原始供应商认为不值得努力的空白,但这可能需要很多年。