Проект Mesa — стек 3D технологий

Описываются особенности функционирования 3D стека Mesa и способы конфигурирования его окружения

Данный раздел справки включает описание проекта Mesa в следующих аспектах: особенности настройки и функционирования, зависимости от других компонентов графической подсистемы, поддержка драйверного обеспечения и доступные переменные окружения.

Особенности реализации
Настройка и зависимости
Поддержка драйверов
Переменные окружения (общие переменные Mesa)
Переменные окружения (интерфейс GF3D)
Переменные окружения (EGL)
Переменные окружения (общие опции драйверов Gallium)
Переменные окружения (опции драйвера i965)
Переменные окружения (опции драйвера llvmpipe)
Переменные окружения (опции драйвера softpipe)
Дополнительные материалы

Особенности реализации

Бинарные компоненты 3D стека поставляются в составе дистрибутивов операционных систем, либо в виде отдельных пакетов обновлений, предназначенных для функционирования в конкретных дистрибутивах и окружениях. При штатной устаноке бинарные компоненты размещаются по адресу /usr/lib/graphics/mesa.


Caution: В предшествующих дистрибутивах ОС архитектуро-зависимый путь установки бинарных компонентов соответствовал /opt/mesa3d/x86, что приводило к необходимости постоянной корректировки путей поиска компонентов через переменные окружения, а также вызывало множественные обращения со стороны заказчиков. Данное неочевидное поведение было решено устранить в том числе за счет использования GLVND — универсального загрузчика 3D стеков. Данное поведение актуально для дистрибутивов ОС версии 2020.09 и выше.

Непосредственная линковка программных компонентов с этой библиотекой не предполагается и нарушает работу загрузчика 3D стеков, библиотеки GLVND.


Caution: В предшествующих дистрибутивах ОС библиотека GLVND не применялась. Единственным способом подключения 3D стека являлась линковка приложения непосредственно с библиотеками стека. Это приводило к невозможности проектирования приложений, способных использовать разные 3D стеки и переключаться между ними без привлечения компилятора. Данный недостаток устранен в дистрибутивах ОС версии 2020.09 и выше.

С поддержкой стандарта OpenCL эквивалентная. Линковка программ с библиотеками стека не предполагается, для этих задач предусмотрен универсальный загрузчик, доступный по стандартному адресу /usr/lib.

Настройка и зависимости

Непосредственная настройка самого стека не требуется и со стороны конечного пользователя практически невозможна. Условием успешной подгрузки библиотек стека в свою очередь является корректная настройка загрузчика. Настройка этого компоннета указана на странице с его описанием.

С точки зрения системной поддержки фреймворка Mesa в графической подсистеме, ему требуется настройка и запуск поддерживаемого драйвера io-display. В таблице ниже указаны конкретные соответствия драйверного обеспечения фреймворка и графической подсистемы.

Настройка универсального загрузчика OpenCL не требуется.

Поддержка драйверов

Стек предоставляет несколько универсальных драйверов программного рендеринга и расширяемый диапазон аппаратно акселерированных драйверов для специализированного оборудования.

Поддерживаются следующие драйвера (список соответствует порядку обхода при детектировании оборудования):

Для принудительного выбора драйвера первого уровня иерархии может использоваться переменная окружения GF3D_DRIVER. При установке переменной LIBGL_ALWAYS_SOFTWARE производится принудительное переключение в программный рендеринг. Переменная GALLIUM_DRIVER в свою очередь позволяет переключаться между llvmpipe и softpipe.

Поддержка различных технологий по драйверам

Драйвер Mesa Архитектура OpenGL OpenGL ES Vulkan OpenCL Особенности реализации
i965
DRI
+
+
-
-
Поддерживается драйверами: devg-intelhd.so, devg-haswell.so, devg-valleyview.so
r600
Gallium
+
+
-
-
Поддерживается драйверами: devg-radeonhd.so
radeonsi
Gallium
+
+
-
+
Поддерживается драйверами: devg-radeonhd.so
llvmpipe
Gallium
+
+
-
-
Зависимость от драйверов отсутствует, не поддерживается для архитектуры e2k
softpipe
Gallium
+
+
-
-
Зависимость от драйверов отсутствует
swrast
swrast
+
+
-
-
Зависимость от драйверов отсутствует

Поддержка оконных библиотек

Драйвер GF3D EGL GLUT SDL Screen
i965
+
-
+
+
-
r600
+
+
+
+
-
radeonsi
+
+
+
+
-
llvmpipe
+
+
+
+
-
softpipe
+
+
+
+
-
swrast
+
+
+
+
-

Переменные окружения (общие переменные Mesa)

LIBGL_DEBUG
Если переменная установлена, в stderr будут печататься дополнительные сообщения об ошибках. Для драйверов с архитектурой Gallium назначение переменной совпадает с MESA_DEBUG. Для DRI драйверов имеет также и расширенный смысл. Доступные значения:
LIBGL_ALWAYS_SOFTWARE
Если переменная установлена, стек переключается в режим программного рендеринга с первым найденным драйвером.
LIBGL_SHOW_FPS
Если переменная установлена и значение больше 0, приложение будет рапортовать в stderr о среднем FPS. Переменная поддерживается только в DRI драйверах, значение характеризует интервал обновления счетчика и вывода сообщений.
MESA_NO_ASM
Переменная отключает ассемблерные оптимизации.
MESA_NO_MMX
Переменная отключает MMX расширения.
MESA_NO_3DNOW
Переменная отключает оптимизации AMD 3DNow!
MESA_NO_SSE
Переменная отключает SSE расширения.
MESA_DEBUG
Если переменная установлена, в stderr будут печататься дополнительные сообщения об ошибках. Доступные значения:
MESA_LOG_FILE
Переменная позволяет определить файл для логирования ошибок, предупреждений и отладочной информации. В противном случае будет использоваться стандартный файл stderr.
MESA_EXTENSION_OVERRIDE
Переменная позволяет включать и отключать отдельные расширения. Например, значение "GL_EXT_foo -GL_EXT_bar" включает расширение GL_EXT_foo и отключает GL_EXT_bar.
MESA_GL_VERSION_OVERRIDE
Переменная позволяет менять тип OpenGL API и значение, возвращаемое вызовом:

glGetString( GL_VERSION )

Значение должно удовлетворять следующим критериям:

MESA_GLES_VERSION_OVERRIDE
Переменная позволяет менять тип OpenGL ES API и значение, возвращаемое вызовом:

glGetString( GL_VERSION )

Значение должно удовлетворять следующим критериям:

MESA_GLSL_VERSION_OVERRIDE
Переменная позволяет менять значение, возвращаемое вызовом:

glGetString( GL_SHADING_LANGUAGE_VERSION )

Корректные значения имеют формат "130". Стек Mesa может не предоставлять полный объем функциональности запрошенной версии шейдерного языка (переменная предназначена только для разработчиков драйверов Mesa).

MESA_GLSL
Переменная позволяет задавать опции компилятору шейдеров.
MESA_NO_MINMAX_CACHE
Если переменная установлена, кэш minimax индексов будет отключен.

Переменные окружения (интерфейс GF3D)

GF3D_DRIVER
Переменная позволяет указать имя драйвера GF3D и избежать поиска подходящего для имеющегося оборудования. Доступные значения:
GF3D_DRIVER_PATH
Переменная задаёт путь поиска драйверов GF3D, по умолчанию осуществляется в подкаталоге /usr/lib/graphics/mesa/mesa.
GF3D_VERBOSE
Переменная устанавливает уровень подробности отладочного вывода в модулях GF3D. Отладочная информация затрагивает вопросы поиска, выбора и загрузки соответствующих драйверов. Доступные значения:

Переменные окружения (EGL)

EGL_DRIVERS_PATH
Переменная определяет путь поиска EGL Драйверов.
EGL_DRIVER
Переменная определяет задает полный путь или имя используемого EGL драйвера.
EGL_PLATFORM
Переменная определяет EGL платформу.
EGL_LOG_LEVEL
Переменная задает уровень вывода отладочной информации. Доступные значения:

Переменные окружения (общие опции драйверов Gallium)

GALLIUM_DRIVER
Переменная переопределяет используемый программный растеризатор Gallium. Стоит отметить, что конкретные программные драйвера не являются отдельными библиотеками и интегрированы в библиотеку pipe_swrast.so. Доступные значения:
GALLIUM_DRIVER_PATH
Переменная задаёт путь поиска драйверов Gallium, по умолчанию осуществляется в подкаталоге /usr/lib/graphics/mesa/gallium-pipe.
GALLIUM_HUD
Переменная позволяет включить оверлейный вывод информации о процессе рендеринга. Некоторые доступные значения:
GALLIUM_HUD_PERIOD
Переменная устанавливает частоту обновления HUD оверлея в секундах (float). Значение 0 приводит к обновлению на каждом кадре. Значение по умолчанию равно 0.5 сек.
GALLIUM_HUD_VISIBLE
Переменная контролирует видимость HUD оверлея. Значение по умолчанию равно true.
GALLIUM_HUD_TOGGLE_SIGNAL
Переменная позволяет определить сигнал для управления видимостью HUD оверлея. Можно установить переменную GALLIUM_HUD_VISIBLE в значение false и задать GALLIUM_HUD_TOGGLE_SIGNAL равным 10 (SIGUSR1). При этом при передаче сигнала SIGUSR1 оверлей будет скрываться или показываться.
GALLIUM_LOG_FILE
Переменная позволяет определить файл для логирования ошибок, предупреждений и отладочной информации. В противном случае будет использоваться стандартный файл stderr.
GALLIUM_PRINT_OPTIONS
При не нулевом значении переменная позволяет вывести все используемые переменные Gallium окружения и их значения.
GALLIUM_DUMP_CPU
Переменная позволяет включить однократный вывод информации о процессоре при запуске клиентской программы.
TGSI_PRINT_SANITY
Если переменная установлена в значение true, производятся дополнительные проверки TGSI шейдеров и в stderr выводятся сведения о найденных ошибках.
DRAW_USE_LLVM
Переменная позволяет отключить использование LLVM в качестве шейдерного компилятора, если у драйвера есть альтернативы.
ST_DEBUG
Переменная контролирует отладочный вывод Gallium state tracker. Список может содержать несколько значений, указанных через запятую. Доступные значения: mesa, tgsi, constants, pipe, tex, fallback, screen, query, draw, buffer, wf, precompile, gremedy, noreadpixcache.

Переменные окружения (опции драйвера i965)

INTEL_NO_HW
Если переменная установлена в значение 1, драйвер не будет посылать реальные команды оборудованию. Это помогает отлаживать аппаратные зависания.
INTEL_DEBUG
Переменная контролирует отладочный вывод драйвера. Список может содержать несколько значений, указанных через запятую. Доступные значения: tex, state, blit, miptree, perf, perfmon, bat, pix, buf, fbo, fs, gs, sync, prim, vert, dri, sf, stats, urb, vs, clip, aub, shader_time, no16, blorp, nodualobj, optimizer, ann, no8, vec4, spill_fs, spill_vec4, cs, hex, nocompact, tcs, tes, l3, do32, norbc.

Переменные окружения (опции драйвера llvmpipe)

LP_NO_RAST
Позволяет отключить растеризацию. Используется для задач профилирования производительности.
LP_DEBUG
Переменная контролирует отладочный вывод драйвера. Список может содержать несколько значений, указанных через запятую. Доступные значения: pipe, tgsi, tex, setup, rast, query, screen, counters, scene, fence, mem, fs.
LP_PERF
Переменная контролирует отключение отдельных модулей драйвера. Используется для задач профилирования производительности. Список может содержать несколько значений, указанных через запятую. Доступные значения: texmem, no_mipmap, no_linear, no_mip_linear, no_tex, no_blend, no_depth, no_alphatest.
LP_NUM_THREADS
Переменная, задающая целочисленное число потоков, использующихся для рендеринга. Значение 0 позволяет отключить многопоточность.

Переменные окружения (опции драйвера softpipe)

SOFTPIPE_DUMP_FS
Если переменная установлена, драйвер напечатает фрагментный шейдер в файл stderr.
SOFTPIPE_DUMP_GS
Если переменная установлена, драйвер напечатает геометрический шейдер в файл stderr.
SOFTPIPE_NO_RAST
Позволяет отключить растеризацию. Используется для задач профилирования производительности.
SOFTPIPE_USE_LLVM
Если переменная установлена, драйвер будет пытаться использовать LLVM JIT для процессирования вершинных шейдеров.

Дополнительные материалы

Переменные окружения, доступные в других ОС и версиях 3D стека могут быть найдены по ссылке https://docs.mesa3d.org/envvars.html.




Предыдущий раздел: Разработка OpenGL приложений