【问题标题】:how to force chrome to use mesa software driver for webgl如何强制 chrome 使用 webgl 的 mesa 软件驱动程序
【发布时间】:2014-08-12 12:46:12
【问题描述】:

我想强制 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”command line switch,但我不确定如何利用它来强制驱动程序进入软件模式。

附带说明一下,我已经在 chrome://flags/ 中启用了“覆盖软件渲染列表”,这确实从“blacklist”中删除了我的模型,从而可以使用 WebGL,但是 OpenGL 功能集还是很有限的。

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

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

【问题讨论】:

    标签: google-chrome ubuntu webgl mesa


    【解决方案1】:

    我没有 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
    

    【讨论】:

    • 感谢您的建议。我已经尝试使用你提到的标志,但我不确定我需要启动什么进程。简单地指定 env var 或 xterm,会导致 WebGL 在 chrome://gpu 上被禁用。你能说得更具体点吗?
    • 我非常接近。我确实像你建议的那样,我可以看到不同之处。 chrome://gpu 现在在指定 --gpu-launcher 时显示 WebGL 支持。但是,当我希望看到 OpenGL 2.1 时,chrome://gpu 也显示 OpenGL 版本仍为 1.4。有任何想法吗?也许“出口”是错误的?也许chrome不使用glx?
    • 感谢您的回答,这行得通。应该是公认的答案。
    • 是否可以强制页面上的一个 webgl 上下文使用软件,而另一个使用硬件?
    猜你喜欢
    • 2017-03-12
    • 1970-01-01
    • 1970-01-01
    • 2015-02-13
    • 2019-03-17
    • 2019-08-25
    • 2014-11-08
    • 2015-07-19
    • 1970-01-01
    相关资源
    最近更新 更多