MyTetra Share
Делитесь знаниями!
Как в Linux запустить программу, требующую OpenGL 4.1 на карточках Intel HD Graphics 4000 (i915)
Время создания: 04.07.2021 23:47
Автор: Xintrea
Текстовые метки: linux, OpenGL, GLSL, intel, HD Graphics 4000, i915, видеокарточка, mesa, шейдер, драйвер, версия
Раздел: Компьютер - Программирование - Шейдеры - Шейдеры GLSL
Запись: xintrea/mytetra_syncro/master/base/16254316488eijzt0t0f/text.html на raw.github.com

Если на компьютере/ноутбуке установлена встроенная видеокарточка Intel HD Graphics 4000 (драйвер ядра i915), то, по состоянию на 2018 год, драйвера Mesa в Debian Linux 9 настроены так, что максимальная версия OpenGL будет 3.0 или 3.3:



$ glxinfo | grep version

server glx version string: 1.4

client glx version string: 1.4

GLX version: 1.4

   Max core profile version: 3.3

   Max compat profile version: 3.0

   Max GLES1 profile version: 1.1

   Max GLES[23] profile version: 3.0

OpenGL core profile version string: 3.3 (Core Profile) Mesa 13.0.6

OpenGL core profile shading language version string: 3.30

OpenGL version string: 3.0 Mesa 13.0.6

OpenGL shading language version string: 1.30

OpenGL ES profile version string: OpenGL ES 3.0 Mesa 13.0.6

OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00



Однако, множество программ уже давно требует OpenGL версии 4.1, хотя на самом деле эти программы не используют возможности, уникальные для OpenGL 4.1. В любом случае, в Linux есть простой метод попробовать запустить программу так, что Mesa будет искусственно рапортовать о версии OpenGL 4.1. И тогда программы начинают запускаться.


Итак, для "подмены" версии OpenGL на 4.1, необходимо выполнить следующие команды:



export MESA_GL_VERSION_OVERRIDE=4.1

export MESA_GLSL_VERSION_OVERRIDE=410



Первая команда подменяет версию OpenGL, а вторая команда подменяет версию языка шейдеров GLSL. Вторую команду задавать не всегда нужно, бывает достаточно только первой команды.


После этого действия Mesa будет показывать следующие поддерживаемые версии OpenGL:



$ glxinfo | grep version

server glx version string: 1.4

client glx version string: 1.4

GLX version: 1.4

   Max core profile version: 4.1

   Max compat profile version: 3.0

   Max GLES1 profile version: 1.1

   Max GLES[23] profile version: 3.0

OpenGL core profile version string: 4.1 (Core Profile) Mesa 13.0.6

OpenGL core profile shading language version string: 4.10

OpenGL version string: 4.1 (Core Profile) Mesa 13.0.6

OpenGL shading language version string: 4.10

OpenGL ES profile version string: OpenGL ES 3.0 Mesa 13.0.6

OpenGL ES profile shading language version string: OpenGL ES GLSL ES 3.00



Далее можно попробовать запустить графическую программу. Например редактор шейдеров Bonzomatic с некоторых пор требует OpenGL 4.1, и если таковой поддержки нет, он выдает ошибку:



$ ./bonzomatic

Looking for config.json in 'BonzoProject'...

[FFT] MAL context initialized, backend is 'PulseAudio'

Open STUB

[GLFW] Version String: 3.3.3 X11 GLX EGL OSMesa clock_gettime evdev

OpenGL 4.1 (the minimum requirement) is not available: GLX: Failed to create context: GLXBadFBConfig

[GLFW] Window creation failed

Renderer::Open failed



А после прописывания "override" - версий OpenGL и GLSL, эта программа начинает запускаться, и в ней можно писать шейдеры версии 3.30 (ориентируясь на версию, указанную в изначальной строке OpenGL core profile shading language version string). В любом случае, судя по датам появления версий стандартов, они менялись менее чем за год:




Версия GLSL

Версия OpenGL

Дата

1.30.10

3.0

22 Ноября 2009

3.30.6

3.3

11 Марта 2010

4.10.6

4.1

24 Июля 2010



Грубо говоря, если в приложении не используются шейдеры тесселяции (tessellation shaders), вычислительные шейдеры и transform feedback object, то такой трюк с подменой версии OpenGL и GLSL поможет запустить программу, и она должна будет работать.


Об отличиях в версия GLSL 3.3 и 4.1 можно почитать в книге: OpenGL 4. Язык шейдеров. Книга рецептов.


Примечание: драйвера Mesa развиваются непрерывно. И поэтому в Debian Linux 10, с тем же драйвером i915, на том же оборудовании Intel HD Graphics 4000, Mesa обеспечивает поддержку спецификации OpenGL 4.2. Поэтому если есть возможность обновиться, то лучше произвести процедуру обновления, вместо того чтобы подменять версии поддерживаемых стандартов. Подменять версии имеет смысл только если компьютерное оборудование изолировано от сети Интернет, или процедура обновления запрещена условиями использования.



Так же в этом разделе:
 
MyTetra Share v.0.65
Яндекс индекс цитирования