Linux - 图形驱动程序和Mesa之间的关系

Irb*_*bis 3 linux opengl drivers nvidia

当我安装nvidia专有驱动程序时,使用Nvidia OpenGL实现(我不需要Mesa).哪个OpenGL实现可以与开源的nvidia驱动程序一起使用 - Nouveau?Nouveau还提供OpenGL实现还是必须使用Mesa OpenGL实现?我可以使用带有Mesa OpenGL实现的nvidia驱动程序吗?有什么可能性?

dat*_*olf 9

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

让我们分解一下:从理论上讲,OpenGL实现可以直接与硬件通信.这就是NVidia和AMD专有驱动程序的实际功能.

但在开源世界中,代码重用非常受欢迎.所以一个典型的开源图形驱动程序如下所示:

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

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

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


我可以使用带有Mesa OpenGL实现的nvidia驱动程序吗?

那要看.如果您在X11上进行间接OpenGL,那么实际上您可以将Mesa libGL.so用于您的程序,通过X11服务器与nvidia后端驱动程序进行通信.无论如何使用libGL.so只是充当GLX管道.它的另一种方式是BTW.

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