как заставить Chrome использовать программный драйвер mesa для webgl

Я хочу заставить Chrome отображать WebGL с помощью программных драйверов, а не оборудования.

Я использую Ubuntu Linux и понимаю, что драйверы Mesa GL можно заставить использовать программную реализацию, указав переменную среды LIBGL_ALWAYS_SOFTWARE = ​​1 при запуске программы. Я подтвердил, что драйвер меняется при указании env var.

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 /), и отредактировал ее, указав env var, но chrome: // gpu по-прежнему показывает GL версии 1.4. Информация о графическом процессоре Chrome содержит многообещающее значение:

Аргументы командной строки --flag-Switches-begin --disable-accelerated-2d-canvas --ignore-gpu-blacklist --flag-Switches-end

Интересно, могу ли я настроить параметр --flag-Switches-begin.

Я также нашел переключатель командной строки '--use-gl', но Я не уверен, как использовать его, чтобы заставить драйвер перейти в программный режим.

В качестве побочного примечания я уже включил «Переопределить список программного рендеринга» в chrome: // flags /, который удалил мою модель из blacklist ', позволяющий использовать WebGL, но Набор функций OpenGL все еще довольно ограничен.

У меня есть старый ноутбук с ужасным «графическим процессором», который я хотел бы использовать для разработки шейдеров и тестирования в WebGL, независимо от производительности.

Можно ли указать Chrome использовать программные драйверы?


person cyrf    schedule 22.06.2014    source источник


Ответы (1)


У меня нет Linux-бокса, поэтому я не могу проверить, но вы можете указать префикс, который хром будет использовать для запуска процесса графического процессора с помощью

--gpu-launcher=<prefix>

Обычно он используется для отладки, например

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

Когда хром запускает процесс, он вызывает 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
person gman    schedule 22.06.2014
comment
Спасибо за предложение. С тех пор я пытался использовать упомянутый вами флаг, но я не уверен, какой процесс мне нужно запустить. Простое указание env var или xterm приводит к отключению WebGL на chrome: // gpu. Не могли бы Вы уточнить? - person cyrf; 24.06.2014
comment
Я очень близок. Мне понравилось, что вы предложили, и я вижу разницу. chrome: // gpu теперь показывает поддержку WebGL при указании --gpu-launcher. Однако chrome: // gpu также показывает версию OpenGL по-прежнему на уровне 1.4, когда я надеялся увидеть OpenGL 2.1. Любые идеи? Может быть, «экспорт» неправильный? Может хром не использует glx? - person cyrf; 24.06.2014
comment
Спасибо за этот ответ, это работает. Должен быть принятый ответ. - person Arne; 29.09.2017
comment
Можно ли заставить один контекст webgl на странице использовать программное обеспечение, а другой - оборудование? - person trusktr; 21.04.2021