Linux - 显卡驱动和Mesa的关系

标签 linux opengl nvidia drivers

当我安装 nvidia 专有驱动程序时,将使用 Nvidia OpenGL 实现(我不需要 Mesa)。哪个 OpenGL 实现可以与开源 nvidia 驱动程序 - Nouveau 一起使用? Nouveau 是否也提供 OpenGL 实现或者它必须使用 Mesa OpenGL 实现?我可以将 nvidia 驱动程序与 Mesa OpenGL 实现一起使用吗?有哪些可能性?

最佳答案

首先要做的事情是:所有开源图形驱动程序都使用 Mesa 作为前端 OpenGL 接口(interface)和状态跟踪。

让我们分解一下:理论上,OpenGL 实现可以直接与硬件对话。这就是 NVidia 和 AMD 专有驱动程序实际执行的操作。

但在开源世界中,代码重用受到高度青睐。因此,典型的开源图形驱动程序如下所示:

用户 API 前端(OpenGL + 状态跟踪器)→ 抽象层(Gallium3D 或设备特定的内部层)→ 内核后端。

Mesa 项目实际上涵盖了整个链条。 Mesa 的 OpenGL 部分(前端)可以附加到不同的抽象层(例如软件光栅器,softpipe/llvm)。但 Mesa 项目也是其他部分的保护伞:用户空间图形驱动程序(nouveau、radeon、intel 等)、允许用户空间进程直接与图形驱动程序对话、绕过显示服务器 (DRI) 和内核接口(interface) (DRM) 以及内核模块。

几周前,AMD 发布了一个使用 DRM API 的新内核模块 (amdgpu),它是开源的,并将合并到 Linux 内核中。这个新的内核模块可供专有的 AMD OpenGL 驱动程序和开源 Mesa 驱动程序使用。 AMD 插入开源已经有一段时间了,合乎逻辑的下一步是,AMD 放弃他们自己的 OpenGL 前端以支持 Mesa,并提供他们的专有驱动程序作为插入 Mesa 的中间端。


Can I use nvidia drivers with Mesa OpenGL implementation ?

这取决于。如果您在 X11 上执行间接 OpenGL,那么实际上您可以为您的程序使用 Mesa libGL.so,通过 X11 服务器与 nvidia 后端驱动程序通信。然而,以这种方式使用 libGL.so 仅充当 GLX 管道。顺便说一句,反之亦然。

然而,由于它缺少“直接 GL 上下文”功能,您将无法使用未定义间接操作码的 OpenGL 功能;遗憾的是,这将是任何 OpenGL-3 或更高版本。此外,如果您的数据是高度动态的,则由于序列化命令流而存在一些重大瓶颈(理论上使用像 vmsplice 这样的系统调用可以减轻大部分开销)。

关于Linux - 显卡驱动和Mesa的关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30120754/

相关文章:

javascript - 开发环境建议

objective-c - 检测屏幕/应用程序窗口的哪一部分正在使用 OpenGL?

c++ - OpenCL:在 CPU 而不是 GPU 上的正确结果:如何正确管理内存?

visual-studio-2010 - 错误消息: Cannot find or open the PDB file

linux - 公司代理背后的 Linux 上的 dotnet restore、NuGet 和 VS Code 问题

linux - 如何在 Linux 中使用 POSIX API 通过消息队列发送整数?

c++ - 为什么实例化数组比 glDrawElement 慢?

android - 为什么很多移动 GPU 支持 OpenGL ES,而不支持 OpenGL?

FFMPEG - 如何识别硬件转码中的瓶颈?

linux - CouchDB View 没有响应