5

我想强制 chrome 使用软件驱动程序而不是硬件来呈现 WebGL。

我正在使用 Ubuntu Linux,并且我知道 Mesa GL 驱动程序可以通过在启动程序时指定环境变量LIBGL_ALWAYS_SOFTWARE=1来强制使用软件实现。我确认在指定环境变量时驱动程序发生了变化。

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 功能集仍然非常有限。

我有一台带有糟糕“gpu”的旧笔记本电脑,无论性能如何,我都想用它来开发一些着色器并在 WebGL 中进行测试。

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

4

1 回答 1

4

我没有 linux 框,所以我无法检查,但您可以指定前缀 chrome 将用于启动 GPU 进程

--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
于 2014-06-22T11:34:19.617 回答