glxinfo简介

简言之,glxinfo是用来帮助debug gfx 3D acceleration setup的 command-line tool。

 

How to tell whether your setup is good

执行

Run glxinfo | grep render

将会得到两行输出,如下

direct rendering: Yes
OpenGL renderer string: Mesa DRI Intel(R) 945GM GEM 20090326 2009Q1 RC2 x86/MMX/SSE2

OpenGL renderer string告诉你现在用的是什么driver, 能告诉你系统此时用的是software rendering还是hardware rendering。在上述输出中,这个Mesa Intel的的driver就是用来做hardware rendering的。

而第一行告诉你是否用的是direct rendering。例如,如果enable了direct rendering,这意味着3D rendering commands是被client application来handle的,而 X server与rendering没有关系。如果enable的是indirect rendering,那么所有的rendering commands是被发往 X server的,此时 X server有可能用的是software rendering,也可能用的是hardware rendering。例如:

direct rendering: No (LIBGL_ALWAYS_INDIRECT set)
OpenGL renderer string: Mesa DRI Intel(R) 945GM GEM 20090326 2009Q1 RC2 x86/MMX/SSE2

这里 OpenGL通过设置环境变量,被强制使用indirect rendering,意味着所有的rendering commands都被发往 X server。但是 X server实际上用的是硬件加速渲染(hardware accelerated rendering)。现在看下面的例子:

direct rendering: Yes
OpenGL renderer string: Software Rasterizer

这里意味着用的是software rendering,但是所有的software rendering是在client application里完成的,所以 X server是空闲的,可以为其他application的requests提供service

正如你所看到的,关于 direct/indirect 和 software/hardware rendering 有4种可能的组合。从性能的角度看,direct + hardware rendering是最快的,indirect + hardware rendring 次之,而基本上software rendering总是最慢的。

 

Troubleshooting options

如果你发现系统用的是 software rendering 而不知道为什么会这样,你可以run LIBGL_DEBUG=verbose glxinfo 来获得额外的debug output(实际上你可以用这个环境变量debug任何OpenGL的application),将会有类似下面的输出

libGL: OpenDriver: trying /usr/lib/dri/tls/r300_dri.so
libGL: OpenDriver: trying /usr/lib/dri/r300_dri.so

这些输出的行前后会有一些additional messages指示错误的原因。如果driver没有在提到的path里被找到,那么OpenGL将会fall back到一个叫 swrast_dri.so的software renderer。这意味着DRI drivers没有被正确的install。

 

Source code and availability

glxinfo一般是被默认安装的,你也可以用 sudo install mesa-utils安装. glxinfo是Mesa的一部分,参考source code可以去demos/src/xdemos/glxinfo.c.

 

glxgears

用以判断Linux是否可以正常渲染2D/3D,直接敲命令glxgears就可以运行,是一个正在跑的齿轮。

posted @ 2021-03-04 17:22  青山牧云人  阅读(4087)  评论(1编辑  收藏  举报