如何检查 OpenGL/EGL 是否在无头服务器上检测到 GPU?

How to check if OpenGL/EGL detects GPU on a headless server?

我正在尝试使用 NVIDIA 的 EGL 库在无头模式下渲染基于 OpenGL 的模拟器。但是,我发现用 EGL 在服务器上渲染与在服务器上用 xvfb 渲染速度是一样的,后者只执行基于软件的渲染。我想知道我的 EGL 是否无法正确检测到我的 NVIDIA GPU。

检查 EGL 和 OpenGL 是否正确检测我的 GPU 的最佳方法是什么?

我尝试了以下命令,发现渲染器设置为基于软件而不是基于 GPU,但我不确定这是否是因为我使用 xvfb 调用 glxinfo:

xvfb-run -a -s "-screen 0 1400x900x24 +extension RANDR -noreset" -- glxinfo | grep "renderer",

输出 OpenGL renderer string: llvmpipe (LLVM 10.0.0, 256 bits).

However, I find that rendering on the server with EGL is the same speed as rendering on the server with xvfb,

如果您的程序使用的是 EGL,那么 运行 它是否在 X 服务器中就没有任何区别。 EGL 的全部目的是完全绕过 X 服务器的必要性。对于启用了 EGL 的屏幕外程序,它是否在 X 环境中 运行 无关紧要(无论是 Xvfb 还是具有 nvidia 驱动程序的 Xorg,正确),因为 它不关心 X.

I am calling glxinfo with an xvfb:

glxinfo 永远不会告诉您 EGL 支持。

在您自己的程序中,建立 OpenGL 上下文后,使用 glGetString 获取有关您 运行 正在使用的 OpenGL 实现的信息。

如果在您自己的程序中,使用 EGL,glGetString(GL_VENDOR)glGetString(GL_RENDERER) 告诉您 Nvidia,那么您就是 GPU 加速的。