Linux上显卡驱动和OpenGL什么关系?

Linux上显卡驱动和OpenGL什么关系?

我安装了最新的专有 Nvidia 驱动程序,即 nvidia-415(根据“驱动程序管理器”界面)。有些程序抱怨我没有 OpenGL 3.3。

因此我运行命令来检查:

$ glxinfo | grep "OpenGL version"
OpenGL version string: 3.0 Mesa 12.0.6
OpenGL core profile version string: 4.3 (Core Profile) Mesa 12.0.6

好的,看来我有 3.0 版本。但是,当我查看 Mesa 时,它被称为“图形堆栈”,并包含 FOSS nvidia 驱动程序和最新的 OpenGL。

还有一个“核心配置文件版本”是 4.3。那么我使用的是 4.3 还是 3.0?

所以现在我很困惑。专有的 Nvidia 驱动程序是否适用于 Mesa OpenGL?或者新的开源驱动程序是否仅适用于 Mesa 的 Open GL,我应该安装 Nvidia 的非 Mesa 专有 OpenGL 才能与其专有驱动程序配合使用?

答案1

我将首先介绍一个简短的 API 定义,然后再逐一介绍,以确保涵盖所有基础知识。下面还有一个 TL;DR。

API 概述

首先,OpenGL 描述了一种抽象的、与语言无关的 API,旨在方便访问机器的图形功能。这允许软件开发人员(如视频游戏开发人员)以最低的成本高效地与硬件交互。低等级,确保速度、可靠性和编程的简易性等。具体来说,如果软件开发人员想要直接与图形硬件对话,他们需要编写代码汇编语言或其他硬件级语言,这些语言编写起来很麻烦且耗时。相反,OpenGL 允许使用高级OpenGL 着色语言使用它更容易,可以认为只是比用硬件自己的语言与硬件对话“高出一步”。这意味着对硬件的调用将非常快,等等。

台面

如上所述,OpenGL 只是 API 的规范。OpenGL 随其安装提供了一个库(您在输出中看到的版本),但为了使这些库正常工作,需要实施的对于给定的操作系统。这就是 Mesa 的用武之地。Mesa(又名 Mesa 3D)是开源的,在许多 Linux 发行版中使用。它最初被认为是 OpenGL 的一个实现,但现在它的功能要多得多。它还实现了其他 API 规范,如 OpenCL,并且与硬件驱动程序。

硬件驱动程序

到目前为止,我们的水平相对较高。Mesa 和 OpenGL 规范只是应用程序(或游戏)和显卡硬件驱动程序之间的中间人,而显卡硬件驱动程序处于较低级别。这里我们有几个选项,Mesa 将根据图形硬件制造商及其与开源计划的合作程度提供其中之一。例如,英特尔的集成显卡几乎总是将 Mesa 用于所有功能,包括 OpenGL 实现和硬件驱动程序。英特尔直接为 Mesa 的源代码做出贡献,因此整个图形解决方案都可以是 Mesa。另一方面,Nvidia...

Nvidia 和 Nouveau

Nvidia 在与开源社区合作时一贯固执己见,宁愿开发自己的闭源替代方案。这种固执让 Linus Torvalds 分享了他的两分钱在一次采访中,Nvidia 谈到了该公司。在 Linux 方面,Nvidia 提供了自己的 OpenGL 实现以及自己的硬件驱动程序 - 全部都是闭源的。Nvidia 已经发布了一些产品驱动程序作为开源,但这是一个产品种类有限新派另一方面,这实际上是开源社区为提供故意逆向工程的 Nvidia 驱动程序版本而做出的努力。尽管这是一项英勇的努力,但这通常意味着 Nouveau 驱动程序中的新显卡功能必然落后于 Nvidia 的专有堆栈,因为开源社区被迫迎头赶上。

总结

如果不知道具体的显卡型号,就很难确定显卡堆栈使用的是哪种类型,但几乎可以肯定是以下情况之一:

  1. Nvidia 提供专有的 OpenGL 实现和硬件驱动程序。
  2. Mesa 用于 OpenGL 实现,Nouveau 用于硬件驱动程序。

由于glxinfo它只是一个用来展示 OpenGL 实现的实用程序,并不能访问硬件,因此您可以尝试使用以下命令查看硬件驱动程序:

lspci -k | grep -EA3 'VGA|3D|Display' 

查找“正在使用的内核驱动程序”字段。然后使用以下命令获取有关该驱动程序的信息:

modinfo drivername

您可能会得到很多输出,因此您只需检查其顶部的许可证,看看它是 GPL 还是其他开源许可证。您不太可能将 Nvidia 内核空间驱动程序与 Mesa 一起使用。

相关内容