当我安装一个nvidia专有驱动程序时,就使用了Nvidia OpenGL实现(我不需要Mesa)。哪一种OpenGL实现可以与开源的nvidia驱动程序--新技术一起使用?Nouveau也提供OpenGL实现,还是必须使用Mesa OpenGL实现?我可以在Mesa OpenGL实现中使用nvidia驱动程序吗?什么是可能性?
发布于 2015-05-08 10:12:34
首先要做的是:开源图形驱动程序(所有这些驱动程序)都使用Mesa作为前端的OpenGL接口和状态跟踪。
让我们分解一下:理论上,OpenGL实现可以直接与硬件对话。这是NVidia和AMD专有驱动程序实际上所做的。
但是在开放源码世界中,代码重用是非常受欢迎的。因此,典型的开源图形驱动程序如下所示:
用户API前端(OpenGL +状态跟踪器)→抽象层(Gallium3D或特定于设备的内部层)→内核后端。
Mesa项目实际上包括整个链。Mesa的OpenGL部分(前端)可以附加到不同的抽象层(例如,软件栅格、软管道/llvm)。但是Mesa项目也是其他部分的保护伞: userland图形驱动程序(nouveau、radeon、intel等),允许用户空间进程直接与图形驱动程序对话的基础设施,绕过显示服务器(DRI)和内核接口(DRM),以及内核模块。
几周前,AMD发布了一个新的内核模块(amdgpu),它使用DRM,是开源的,将被合并到Linux内核中。这个新的内核模块将被专有的AMD OpenGL驱动程序和开源台面驱动程序使用。AMD现在正在推动开源一段时间,下一步的逻辑是,AMD放弃自己的OpenGL前端,转而支持Mesa,并将其专有驱动程序作为插入Mesa的中间端。
我可以在Mesa OpenGL实现中使用nvidia驱动程序吗?
这要看情况了。如果您在X11上执行间接X11操作,那么实际上您可以为您的程序使用Mesa libGL.so,通过X11服务器与nvidia后端驱动程序对话。然而,使用这种方式,libGL.so只是充当GLX管道。它的工作方式相反,以及BTW。
但是,由于缺乏“直接GL上下文”功能,您将无法使用没有为其定义任何间接操作码的OpenGL特性;可悲的是,这将是OpenGL-3或更高版本的任何特性。另外,如果您的数据是高度动态的,则由于序列化命令流而存在一些严重的瓶颈(不过,理论上使用vmsplice之类的syscalls可以减轻大部分开销)。
https://stackoverflow.com/questions/30120754
复制相似问题