如何强制Chrome使用Mesa软件驱动程序进行WebGL?

6
我希望强制Chrome使用软件驱动程序来渲染WebGL,而不是硬件驱动程序。
我正在使用Ubuntu Linux,并且我了解可以通过指定环境变量LIBGL_ALWAYS_SOFTWARE=1来强制Mesa GL驱动程序使用软件实现。当启动程序时,我确认了驱动程序的更改。
bash$ glxinfo | grep -i "opengl"
OpenGL vendor string: Intel Open Source Technology Center
OpenGL renderer string: Mesa DRI Intel(R) 945GM x86/MMX/SSE2
OpenGL version string: 1.4 Mesa 10.1.3
OpenGL extensions:

bash$ LIBGL_ALWAYS_SOFTWARE=1 glxinfo | grep -i "opengl"
OpenGL vendor string: VMware, Inc.
OpenGL renderer string: Gallium 0.4 on llvmpipe (LLVM 3.4, 128 bits)
OpenGL version string: 2.1 Mesa 10.1.3
OpenGL shading language version string: 1.30
OpenGL extensions:

默认的GL驱动程序提供OpenGL 1.4支持,而软件驱动程序提供OpenGL 2.1支持。
我找到了桌面启动器的位置(/usr/share/applications/),并编辑它以指定环境变量,但chrome://gpu仍显示GL版本1.4。Chrome GPU信息包含一个有希望的值:
命令行参数--flag-switches-begin --disable-accelerated-2d-canvas --ignore-gpu-blacklist --flag-switches-end
我想知道是否可以自定义--flag-switches-begin。
我还发现了'--use-gl'命令行开关,但我不确定如何利用它将驱动程序强制进入软件模式。
顺便说一句,我已经在chrome://flags/中启用了“覆盖软件渲染列表”,这确实将我的模型从黑名单中删除,使WebGL可用,但OpenGL功能集仍然相当有限。
我有一台旧笔记本电脑,显卡很差,但我想用它来开发一些着色器并在WebGL中进行测试,不考虑性能。

是否可以告诉Chrome使用软件驱动程序?

1个回答

4

我没有Linux系统,所以无法检查,但你可以为启动GPU进程指定Chrome使用的前缀。

--gpu-launcher=<prefix>

这通常用于调试,例如

--gpu-launcher="xterm -e gdb --args"

当Chrome启动进程时,它会调用spawn。通常情况下,它只是启动一个新的进程。
path/to/chrome <various flags>

--gpu-launcher 允许您添加前缀。例如,

 --gpu-launcher=/usr/local/yourname/launch.sh 

它将触发生成

 /usr/local/yourname/launch.sh path/to/chrome <various flags>

现在,您可以让 /usr/local/yourname/launch.sh 实现你想要的功能,并最终启动 Chrome。最简单的方法可能是:
#!/bin/sh
"$@"

在您的情况下,我猜想您希望:
#!/bin/sh
export LIBGL_ALWAYS_SOFTWARE=1
"$@"

请确保将launch.sh标记为可执行文件。


根据上面的脚本,这对我有用。

/opt/google/chrome/chrome --ignore-gpu-blacklist --gpu-launcher=/usr/local/gman/launch.sh

随后,about:gpu 给出了以下结果:

GL_VENDOR   VMware, Inc.
GL_RENDERER Gallium 0.4 on llvmpipe (LLVM 0x301)
GL_VERSION  2.1 Mesa 9.0.3

谢谢您的建议。我已经尝试使用您提到的标志,但我不确定需要启动哪个进程。仅仅指定环境变量或xterm会导致在chrome://gpu上禁用WebGL。您能否更具体一些? - cyrf
我已经非常接近了。我按照你的建议做了,我能看到一些不同之处。当指定--gpu-launcher时,chrome://gpu现在显示支持WebGL。然而,chrome://gpu也显示OpenGL版本仍然是1.4,而我希望看到的是OpenGL 2.1。有什么想法吗?也许'export'是错误的?也许chrome不使用glx? - cyrf
谢谢你的回答,这个可行。应该被采纳为最佳答案。 - Arne
在页面上,是否可以强制一个WebGL上下文使用软件,而另一个使用硬件? - trusktr

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接