Linux-图形驱动程序与台面之间的关系



当我安装NVIDIA专有驱动程序时,则使用NVIDIA OpenGL实现(我不需要MESA)。可以与开源NVIDIA驱动程序-Nouveau一起使用哪种OpenGL实现?Nouveau是否还提供OpenGL实现,或者必须使用MESA OpenGL实现?我可以将NVIDIA驱动程序与MESA OpenGL实现使用吗?什么可能性?

首先:开源图形驱动程序,所有这些驱动程序,都将MESA用于前侧OpenGL接口和状态跟踪。

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

但是,在开源世界代码中,重复使用非常受欢迎。因此,典型的开源图形驱动程序看起来像这样:

用户API前端(OpenGL State Tracker)→抽象层(Gallium3D或设备特定内部层)→内核后端。

MESA项目实际上涵盖了整个链。MESA的OpenGL部分(前端)可以连接到不同的抽象层(例如,软件射手仪,SoftPipe/LLVM)。但是MESA项目也是其他部分的保护伞:Userland图形驱动程序(Nouveau,Radeon,Intel等),允许用户空间流程直接与图形驱动程序交谈的基础架构,绕过显示服务器(DRI)(DRI)和内核接口(DRM)以及内核模块。

几周前,AMD发布了使用DRM API的新内核模块(AMDGPU)是开源的,并将合并到Linux内核中。专有AMD OpenGL驱动程序和开源台台驱动程序都可以使用新的内核模块。AMD现在正在推动开源一段时间,逻辑下一步将是,AMD抛弃了自己的OpenGL前端,以支持MESA,并将其专有驱动程序作为插入MESA的中端。


我可以将NVIDIA驱动程序与MESA OpenGL实现吗?

取决于。如果您在X11上进行间接OpenGL,则实际上可以使用Mesa libgl.so进行程序,通过X11服务器与NVIDIA后端驱动程序进行交谈。然而,使用这种方式libgl.因此仅充当GLX管道。顺便说一句。

但是,由于缺少"直接GL上下文"功能,您将无法使用未定义间接opcodes的openGL功能;可悲的是,那将是任何OpenGL-3或更高版本。另外,如果您的数据高度动态,则由于序列化命令流而存在一些显着的瓶颈(理论上使用syscalls(例如vmsplice),大多数开销都可以缓解)。

最新更新