当我安装NVIDIA专有驱动程序,然后使用Nvidia OpenGL实现(我不需要Mesa)。 哪一个OpenGL实现可以与一个开放源代码的nvidia驱动程序一起使用 – Nouveau? Nouveau还提供OpenGL实现还是必须使用Mesa OpenGL实现? 我可以在Mesa OpenGL实现中使用nvidia驱动吗? 什么是可能性?
第一件事:开源的图形驱动程序,所有这些,使用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渠道。 顺便说一句,它也是相反的。
但是,由于缺乏“直接GL上下文”功能,您将无法使用未定义间接操作码的OpenGL功能。 那可能是OpenGL-3或更高版本,不幸的是。 另外,如果你的数据是高度动态的,由于序列化命令流有一些重要的瓶颈(理论上使用像vmsplice这样的系统调用,尽管如此,大部分的开销也可以减轻)。