KDE SC 4.5.0 有一些视频卡的问题,包括我的。发布后Arch 推荐了几种解决方法。其中之一是
在启动 KDE 之前导出“LIBGL_ALWAYS_INDIRECT=1”
我决定这是最简单、最好的方法。但我不知道它做什么或它如何影响我的系统。它比默认值慢吗?我应该记得密切关注问题并在问题解决后将其禁用吗?
Mac*_*tka 23
间接渲染意味着将使用 GLX 协议来传输 OpenGL 命令,而 X.org 将进行真正的绘制。
直接渲染意味着应用程序可以直接访问硬件,而无需先通过 mesa 与 X.org 通信。
直接渲染速度更快,因为它不需要将上下文更改为 X.org 进程。
澄清:在这两种情况下,渲染都是由 GPU 完成的(或者从技术上讲 - 可能由 GPU 完成)。但是在间接渲染中,过程如下所示:
在直接渲染中
请注意,由于 OpenGL 的设计方式可以通过网络运行,因此间接渲染比架构的幼稚实现更快,即允许一次性发送大量命令。然而,在用于上下文切换和处理协议的 CPU 时间方面存在一些开销。
Nat*_*idd 17
首先,LIBGL_ALWAYS_INDIRECT是与 Mesa 3D 客户端 OpenGL 实现 (libGL.so) 相关的标志。它不适用于其他供应商(例如 NVIDIA)的二进制驱动程序。
其次,为了直接回答您的问题,最后我查看了 Mesa 代码,该标志的工作方式如下:
大约 2008 年之前,当 Mesa 使用间接 X 服务器(例如,您ssh -X已将显示设置为或明确设置为非本地服务器)时,它将使远程 X 服务器提供的 GLX 视觉列表可用于您的 GLX 应用程序。应用程序调用,例如 glXChooseVisual() 和 Mesa 会找到一些合理匹配的东西,随后的glFoo()调用将被发送到远程 X 服务器,在那里它们由远程 X 服务器连接到的任何 libGL(可能是您的 GPU)执行。
大约在 2008 年底,Mesa 发生了变化,因此它希望使用其内部软件 OpenGL 渲染器(Xlib 驱动程序)进行远程 X 连接。(像 SuSE 这样的一些发行版专门对此进行了修补以恢复旧的行为。)只有当远程 X 服务器提供与内部软件渲染器之一完全匹配的 GLX 视觉效果时,这才会启动。(否则,您会得到常见的“错误:无法获得 RGB、双缓冲视觉效果”。)如果找到这样的视觉效果,那么 Mesa 将glFoo()使用本地(应用程序)CPU呈现所有命令,并推送通过光栅图像 ( XPutImage()) 将结果发送到远程 X 服务器;设置LIBGL_ALWAYS_INDIRECT=1(在 Mesa 17.3 之前,任何值都可以使用,从那时起您必须使用1或true) 告诉 Mesa 忽略正常的直接渲染或内部软件渲染器,并像以前一样使用间接渲染。
选择间接渲染或直接软件渲染会影响两件事:
OpenGL 版本
表现
glGetInteger()每帧执行 100 次这样的愚蠢操作,那么即使在快速 LAN 上,每个查询也很容易占用 1 毫秒,或每帧总计 100 毫秒,这意味着您的应用程序永远不会超过 10 FPS。glGetInteger()调用都会在微秒或纳秒内直接得到应答。因此,如果没有应用程序的确切细节和网络特性,就无法判断直接软件渲染还是间接渲染在任何给定情况下都更好。
在您的情况下,您似乎正在运行本地 kwin 实例,因此 的效果LIBGL_ALWAYS_INDIRECT是强制间接渲染到您的本地 X 服务器。这显然改变了kwin的行为(仅限 OpenGL 1.4)或避免了其他一些错误。
当根本问题得到解决时,您肯定要删除此标志。
| 归档时间: |
|
| 查看次数: |
37687 次 |
| 最近记录: |