Загрузки
Спонсорство
Известные проблемы
Различия между пакетами MSVC и MinGW
Содержимое пакета Mingw и MSVC
Общие общие библиотеки OpenGL и OpenGL ES
Microsoft CLonD3D12, GLonD3D12, драйвер Dozen Vulkan и общая зависимость D3D12 VA-API
Драйверы OpenGL для настольных компьютеров
Драйвер внеэкранного рендеринга OpenGL
Драйверы OpenGL ES и библиотека EGL
Драйверы Вулкан
Драйверы, компиляторы и серверные части OpenCL
Драйверы, библиотеки и инструменты Direct3D
Драйверы VA-API
Библиотека тестирования и инструменты
Пакеты разработки
Отладочные пакеты
Создайте Mesa3D самостоятельно
Установка и использование
Примечания по использованию
Удалить Mesa3D
Совместимость с устаревшим программным обеспечением
Переопределение конфигурации контекста OpenGL
Как установить переменные среды
Сборки Mesa 24.2.6 с Visual Studio и MSYS2 Mingw-w64 теперь доступны в разделе релизов.
Проект mesa-dist-win получил спонсорскую поддержку, которая была продлена до 1 ноября 2024 года. Спонсорство заключается в бесплатном VPS на французском узле для использования в качестве машины для сборки с 12 ГБ ОЗУ, 6-поточным процессором AMD EPYC 7763 и твердотельным накопителем NVMe емкостью 150 ГБ от Petrosky, компания, предоставляющая хостинг виртуальных частных серверов, благодаря @Directox01.
Это список всех часто встречающихся проблем с известными решениями или обходными путями. На конкретную версию влияет только часть из них.
Ошибка отсутствия libgallium_wgl.dll
в драйверах Mesa3D OpenGL ES и настольных OpenGL
Это встречается в существующих развертываниях для каждого приложения, выполненных с помощью версии 21.2.x или более ранней, при обновлении до версии 21.3.0 или более поздней. Просто повторите развертывание каждого приложения, чтобы исправить это. Отделение Gallium megadriver от opengl32.dll
было очень инвазивным изменением, против которого существующие развертывания для каждого приложения не имели шансов. Если вы не помните, является ли затронутая программа 32-битной или 64-битной, щелкните правой кнопкой мыши ярлык opengl32.dll
в папке, где находится исполняемый файл программы, и выберите местоположение открытого файла. Если местоположение заканчивается на x64, то оно 64-битное, в противном случае — 32-битное.
Ошибка отсутствия libEGL.dll
в Mesa3D OpenGL ES
Это встречается в существующих развертываниях для каждого приложения, выполненных с помощью версии 21.2.x или более ранней, при обновлении до версии 21.3.0 или более поздней. Просто повторите развертывание каждого приложения, чтобы исправить это. Поддержка EGL была очень инвазивным изменением, против которого существующие развертывания для каждого приложения не имели шансов. Если вы не помните, является ли затронутая программа 32-битной или 64-битной, щелкните правой кнопкой мыши ярлык opengl32.dll
в папке, где находится исполняемый файл программы, и выберите местоположение открытого файла. Если местоположение заканчивается на x64, то оно 64-битное, в противном случае — 32-битное.
Ошибка отсутствия libvulkan-1.dll
в Mesa3D opengl32.dll
из пакета выпуска MinGW
Затрагиваются только выпуски до 22.2.0, для которых драйвер zink был собран с группой пакетов MSYS2 MinGW-W64 vulkan-devel. Запустите fix-libvulkan-1.dll-missing-error.cmd
из пакета выпуска MinGW, чтобы исправить это. Этот инструмент поддерживает автоматическое выполнение с помощью опции auto
командной строки. Этот инструмент включен в пакет выпуска MinGW только при необходимости, в противном случае он намеренно отсутствует. Решение использовать этот Vulkan SDK вместо LunarG принимается на основе того, что поставляется с более новым загрузчиком и заголовками.
64-битные двоичные файлы в пакетах MSVC и MinGW требуют процессора с AVX, хотя они не должны
Это больше не проблема, начиная с Mesa 22.0 или новее. Эта проблема вызвана 64-битными двоичными файлами, содержащими драйвер swr, который пропускает использование AVX в общий код. Об этой ошибке восходящего потока сообщалось здесь, здесь и здесь.
Mesa opengl32.dll
из пакета MinGW зависит от среды выполнения Vulkan, начиная с 21.0.0.
Это было исправлено в версии 22.2.0, включив требование явного использования драйвера zink. Это регрессия восходящего потока, возникшая, когда драйвер zink был исправлен для поддержки Windows.
Программы могут вести себя так, как будто нет поддержки OpenGL при использовании Mesa opengl32.dll
начиная с 21.0.0.
Это не дефект, а скорее изменение поведения Mesa при неправильной настройке переменных среды. Обычно это происходит при выборе драйвера Mesa, которого нет в используемом пакете выпуска, или его не удается инициализировать из-за того, что хост-система не соответствует требованиям к оборудованию или не имеет зависимостей. Чтение различий между пакетами MSVC и MinGW и содержимым пакетов Mingw и MSVC должно помочь в устранении неполадок.
Важные примечания об ошибках, связанных с отсутствием libglapi.dll
Вы можете столкнуться с ними в программах, использующих любой драйвер OpenGL Mesa3D для настольных ПК, с помощью инструмента развертывания для каждого приложения; общесистемное развертывание не затрагивается. Вы можете столкнуться с ними, если развертывание каждого приложения выполнялось до того, как была введена общая поддержка glapi. общий glapi постоянно доступен как в пакетах MSVC, так и в MinGW, начиная с версии 20.0.2.
Чтобы исправить эти ошибки, независимо от причины, необходимо выполнить повторное развертывание. Если вы не помните, является ли затронутая программа 32-битной или 64-битной, щелкните правой кнопкой мыши ярлык opengl32.dll
в папке, где находится исполняемый файл программы, и выберите местоположение открытого файла. Если местоположение заканчивается на x64, то оно 64-битное, в противном случае — 32-битное.
Та же проблема с тем же решением относится и к osmesa, если вы обновляетесь с версии 17.3.5.501-1 или старше.
Для пакета MinGW требуется процессор с SSSE3, обеспечивающий повышение производительности на 3–5 % с помощью драйверов программного рендеринга;
d3d10sw, представленный в версии 21.2.0, доступен только в пакете MSVC.
Если вам нужно перейти с Mingw на двоичные файлы MSVC, вам просто нужно заменить папку двоичных файлов Mesa из пакета Mingw на аналог MSVC.
В каждый выпуск включены следующие драйверы Mesa3D и артефакты сборки:
Общая библиотека GLAPI. Имя файла: libglapi.dll
. Его присутствие требуется при обеспечении поддержки как OpenGL, так и OpenGL ES. Средство внеэкранного рендеринга Mesa3D и все драйверы Mesa3D OpenGL и OpenGL ES зависят от него, если они присутствуют. Начиная с версии 20.0.2 он доступен как в пакетах MSVC, так и в MSYS2 Mingw-w64.
Мегадрайвер Gallium OpenGL. Имя файла: libgallium_wgl.dll
. Если он присутствует, он содержит все драйверы OpenGL для рабочего стола Mesa3D вместо opengl32.dll
. Он дебютировал в версии 21.3.0. Библиотека Mesa3D EGL и драйверы OpenGL ES зависят от нее, если она присутствует.
Среда выполнения Mesa3D WGL. Имя файла: opengl32.dll
. Раньше он содержал все драйверы OpenGL для рабочего стола Mesa3D, и от него зависела OpenGL ES, но с версии 21.3.0 он был сокращен до загрузчика мегадрайвера Gallium OpenGL, поэтому от него зависят только программы, использующие драйверы OpenGL для рабочего стола Mesa3D через развертывание для каждого приложения. сейчас.
DirectX IL для распространения. Имя файла: dxil.dll
. Этот распространяемый двоичный файл предоставляется в составе Windows SDK и компилятора шейдеров DirectX и упаковывается в процессе выпуска. Средства развертывания устанавливают его при необходимости.
llvmpipe. llvmpipe — это программный рендерер OpenGL для настольных компьютеров, предназначенный в качестве запасного варианта, когда аппаратное ускорение невозможно. Он может работать только с очень легкими играми с хорошей производительностью. Это драйвер OpenGL для рабочего стола Mesa3D по умолчанию, когда GLonD3D12 недоступен или не загружается. Он доступен как для x86, так и для x64 как часть пакета Mesa3D Desktop OpenGL opengl32.dll
или libgallium_wgl.dll
, если последний доступен. Если это не драйвер по умолчанию, выберите его, установив переменную среды GALLIUM_DRIVER=llvmpipe
.
softpipe — это эталонная реализация программного средства рендеринга OpenGL для настольных компьютеров, не ориентированная на производительность в играх. Он доступен как для x86, так и для x64 как часть пакета Mesa3D Desktop OpenGL opengl32.dll
или libgallium_wgl.dll
, если последний доступен. Выберите его, установив переменную среды GALLIUM_DRIVER=softpipe
.
ГЛонД3Д12. Он доступен как для x86, так и для x64 в пакете MSVC, а с версии 22.2.0 в пакете MinGW, а также как часть пакета Mesa3D Desktop OpenGL opengl32.dll
или libgallium_wgl.dll
если последний доступен, и до версии 22.3.0 как отдельный openglon12.dll
также. Помимо официального требования Windows 10 v10.0.19041.488 или новее, для перераспределения также требуется DirectX IL — загрузка dxil.dll
, которую можно установить с помощью инструментов развертывания. Если он доступен и может загружаться, это драйвер OpenGL для настольных компьютеров Mesa3D по умолчанию в системах с графическим ускорением D3D12. Этот драйвер, представленный в версии 21.0.0, работает как оболочка, возвращающая вызовы API D3D12. Благодаря этому он может использовать ускорение графического процессора. Если он не выбран по умолчанию, вы можете протестировать его с помощью программного средства рендеринга Direct3D WARP, встроенного в Windows, установив переменные среды GALLIUM_DRIVER=d3d12
и LIBGL_ALWAYS_SOFTWARE=1
. Для автономной копии не требуется установка GALLIUM_DRIVER=d3d12
, и ее можно установить только с помощью общесистемного инструмента развертывания. Автономный пакет GLonD3D12 и Mesa3D Desktop OpenGL заменяют друг друга при использовании общесистемного инструмента развертывания, но вы можете отменить его в любое время.
цинк. Этот драйвер представлен в пакете MinGW в версии 21.0.0 и пакете MSVC в версии 21.2.0. Он доступен как для x86, так и для x64 как часть пакета Mesa3D Desktop OpenGL opengl32.dll
или libgallium_wgl.dll
если последний доступен. Подобно GLonD3D12, он действует как оболочка, возвращающая вызовы API Vulkan. По этой причине он по умолчанию использует ускорение графического процессора, но также поддерживает программный рендеринг. Выберите его с помощью переменной среды GALLIUM_DRIVER=zink
, но учтите, что для его инициализации требуется как минимум 1 устройство Vulkan и загрузчик/среда выполнения Vulkan. zink по умолчанию игнорировал устройства типа ЦП Vulkan до версии 22.1.0. В настоящее время он использует систему приоритетов, которая автоматически выбирает устройство типа ЦП Vulkan, если не существует устройства типа Vulkan с более высоким приоритетом. Вы можете протестировать zink на устройствах типа ЦП Vulkan, только установив LIBGL_ALWAYS_SOFTWARE=1
(Mesa 22.1.0 и новее) или ZINK_USE_LAVAPIPE=true
(не рекомендуется в Mesa 22.1.0).
ср. Этот драйвер больше недоступен в Mesa 22.0 и более поздних версиях. Имена файлов: swrAVX.dll
, swrAVX2.dll
, swrSKX.dll
, swrKNL.dll
. Несмотря на то, что он находится за пределами пакета OpenGL Mesa3D Desktop opengl32.dll
или libgallium_wgl.dll
, если последний доступен, он все равно зависит от него. Этот альтернативный драйвер рендеринга программного обеспечения OpenGL для настольных компьютеров, разработанный Intel, оптимизирован для программного обеспечения визуализации. Он доступен в пакете MSVC, а с версии 20.1.7 также в пакете MinGW. Он поддерживает только x64, x86 официально не поддерживается. В настоящее время существует 4 библиотеки DLL, из которых загружается только одна в зависимости от возможностей процессора пользователя. Вы можете переключиться на swr, установив значение переменной среды GALLIUM_DRIVER равным swr.
осмеса. Имя файла: osmesa.dll
. Доступно как для x86, так и для x64. Этот драйвер используется в особых случаях программным обеспечением, которое предназначено для использования кода Mesa для рендеринга без какой-либо зависимости от оконной системы или операционной системы. С 21.0.0 осталась только осмеса галлия. Он поддерживает OpenGL 3.x и новее. Начиная с версии 20.0.2 интеграция osmesa с автономными драйверами GLLES доступна как в пакетах MSVC, так и в MSYS2 Mingw-w64, требующих в процессе работы libglapi.dll
.
библиотека ЭГЛ. Имя файла: libEGL.dll
. Библиотека Mesa3D EGL, используемая драйверами OpenGL ES. Это дебютировало в версии 21.3.0 и доступно для 32-битных и 64-битных приложений в пакетах MSVC и MSYS2. Это зависит от пакета OpenGL для настольных компьютеров opengl32.dll
или libgallium_wgl.dll
, если последний доступен.
Автономные драйверы OpenGL ES. Имена файлов: libGLESv1_CM.dll
и libGLESv2.dll
. Автономные драйверы OpenGL ES 1.x, 2.x и 3.x доступны для 32-битных и 64-битных приложений. Начиная с версии 20.0.2 они доступны как в пакетах MSVC, так и в MSYS2 Mingw-w64. Они зависят от библиотеки Mesa3D EGL, если она доступна, и пакета OpenGL для рабочего стола opengl32.dll
или libgallium_wgl.dll
, если последний доступен.
Драйвер ЦП lavapipe Vulkan доступен как в пакетах MSVC, так и в MinGW, начиная с версии 21.1.0. Имена файлов: lvp_icd.x86_64.json
, lvp_icd.x86.json
, vulkan_lvp.dll
. Обратите внимание, что некоторые программы могут намеренно игнорировать устройства типа ЦП Vulkan. Информацию о том, как развернуть, см. в примечаниях по использованию.
Драйвер Microsoft десятки Vulkan доступен с версии 22.1.0 в пакете MSVC, а также с версии 22.2.0 в пакете MinGW. Для работы этого драйвера используется API D3D12, и он может использовать ускорение графического процессора в поддерживаемых системах. Имена файлов: dzn_icd.x86_64.json
, dzn_icd.x86.json
, vulkan_dzn.dll
. Информацию о том, как развернуть, см. в примечаниях по использованию.
Драйвер Vulkan для графики AMD (radv) больше не доступен с версии 22.1.0 по предложению @zmike, поскольку он не будет работать в ближайшее время. RADV был доступен как в пакетах MSVC, так и в MinGW, начиная с версии 21.2.0. 32-битный двоичный файл был доступен начиная с Mesa 22.0. Имена файлов: radeon_icd.x86_64.json
, radeon_icd.x86.json
, libvulkan_radeon.dll
и vulkan_radeon.dll
. Информацию о том, как развернуть, см. в примечаниях по использованию.
Стек Microsoft OpenCL. Имена файлов: clon12compiler.dll
(компилятор), openclon12.dll
(ICD) и WinPixEventRuntime.dll
(зависимость только для x64). Эти компоненты, представленные в версии 21.0.0, наконец, предоставляются mesa-dist-win начиная с версий 21.3.0 (только компилятор) и 21.3.6-2 соответственно. Драйвер CLonD3D12 доступен в виде OpenCL ICD. Информацию о том, как развернуть, см. в примечаниях по использованию. Для CLonD3D12 официально требуется Windows 10 версии 10.0.19041.488 или новее, а для распространения требуется DirectX IL — загрузка dxil.dll
, которую можно установить с помощью инструментов развертывания. CLonD3D12 работает как оболочка, возвращающая вызовы API D3D12. Из-за этого он может использовать ускорение графического процессора D3D12, если оно доступно, в противном случае используется встроенное программное обеспечение Windows для рендеринга WARP. При использовании WARP CLonD3D12 использовался для рекламы CL_DEVICE_TYPE_GPU, но в версии 23.0.0 это изменилось на CL_DEVICE_TYPE_CPU, см. microsoft/OpenCLOn12#19. Некоторые программы специально игнорируют драйверы с установленным CL_DEVICE_TYPE_CPU. Старое поведение до версии 23.0.0 можно восстановить, начиная с Mesa 24.0.3, установив значение переменной среды CLON12_WARP_IS_HARDWARE
равным 1.
Стек clover OpenCL был удален из пакета выпуска в версии 22.1.1 до тех пор, пока поддержка Windows не будет завершена, поскольку в настоящее время он непригоден для использования. Имена файлов: MesaOpenCL.dll
(ICD), OpenCL.dll
(автономная среда выполнения) и pipe_swrast.dll
(загрузчик каналов). Среду выполнения можно развернуть с помощью инструмента развертывания для каждого приложения, начиная с версии 21.3.7, или в более старых версиях путем копирования и вставки вместе со всеми доступными загрузчиками каналов, от которых это зависит. При развертывании среда выполнения скрывает все другие ICD OpenCL, присутствующие в системе, и позволяет программному обеспечению использовать только клевер Mesa3D в качестве единственного драйвера OpenCL. Информацию о том, как развернуть ICD, см. в примечаниях по использованию.
Программный рендерер D3D10 доступен в пакете MSVC с версии 21.2.0. Имя файла: d3d10sw.dll
. Это замена Microsoft WARP, и, к сожалению, не существует чистого способа ее развертывания.
Инструмент и библиотека SPIR-V to DXIL доступны в пакете MSVC с версии 21.0.0, а также с версии 22.2.0 в пакете MinGW. Имена файлов: libspirv_to_dxil.dll
, spirv_to_dxil.dll
и spirv2dxil.exe
.
Драйвер VA-API D3D12. Имена файлов: vaon12_drv_video.dll
. Этот драйвер стал доступен в версии 22.3.0. Как и GLonD3D12, CLonD3D12 и десятки, это многоуровневый драйвер, работающий поверх API Direct3D 12, поэтому он может использовать ускорение графического процессора, если оно доступно. Инструкции по развертыванию задокументированы Microsoft. Для облегчения этого процесса был обновлен инструмент развертывания по каждому приложению.
Необработанный интерфейс галлия. Этот устаревший компонент был удален в Mesa3D 22.3.0. Имена файлов: graw.dll
, graw_null.dll
. Это фиктивный драйвер Gallium без какого-либо графического API, который в основном используется для тестирования. Доступно как для x86, так и для x64, а также в полной (с поддержкой оконной системы) и безголовой (без окон) версиях. Начиная с версии 20.0.2 как оконная, так и безоконная версии доступны как в пакетах MSVC, так и в MSYS2 Mingw-w64.
тестовый набор. Множество исполняемых модульных тестов.
Заголовки и библиотеки как для 32-битной, так и для 64-битной сборки находятся в отдельном архиве, который называется пакетом разработки.
Начиная с версии 22.2.0 доступен пакет отладочной информации MSVC, содержащий символы отладки в формате PDB, а также пакет сборки, оптимизированный для отладки, с поддержкой утверждений MinGW. Двоичные файлы отладки MinGW можно использовать в качестве замены своих релизных аналогов. При использовании программного обеспечения для развертывания по каждому приложению это должно происходить без проблем, но для общесистемного развертывания необходимо повторное развертывание для переключения с выпуска на отладочные сборки и наоборот. Дополнительную информацию об отладке MinGW см. в разделе debug/mingw-start-debugging.sh.
Инструкции по сборке, если вы хотите повторить мои сборки, доступны здесь.
Сначала выберите между пакетом Mingw и MSVC. Подробности см. в разделе «Различия между пакетами MSVC и MinGW». Перед извлечением пакета выпуска закройте все программы, использующие Mesa, если они запущены. После извлечения у вас будет доступ к двум вариантам развертывания, оба расположены в каталоге, в котором вы установили Mesa. Обе утилиты развертывания имеют механизм повторного запуска, поэтому вы можете выполнить все необходимые развертывания за один сеанс. Инструменты развертывания поддерживают только компоненты OpenGL и OpenGL ES Mesa3D, а также автономный OpenCL clover.
Инструмент общесистемного развертывания. Хотя он предназначен для систем, в которых отсутствует поддержка OpenGL с аппаратным ускорением, таких как виртуальные машины в облачных средах, его также можно использовать в любой системе Windows для замены драйвера рендеринга входящего программного обеспечения OpenGL 1.1, расширяющего поддержку OpenGL для случаев использования, когда OpenGL с аппаратным ускорением недоступен, например, соединения RDP. . Из-за потенциальных проблем с виртуальными машинами Virtualbox под управлением Windows рекомендуется отключить 3D-ускорение на таких виртуальных машинах, если внутри них установлен драйвер OpenGL Mesa3D Desktop с помощью общесистемного инструмента развертывания, см. №9.
Инструмент развертывания для каждого приложения, используемый для развертывания Mesa3D для одной программы независимо от того, присутствует или нет поддержка аппаратного ускорения OpenGL. Изменения утилиты развертывания для каждого приложения являются постоянными и сохраняются при обновлениях и переустановках. Утилита развертывания для каждого приложения помогает сэкономить место и упрощает работу, поскольку вам не придется вручную копировать библиотеки DLL из каталога установки Mesa, поскольку она создает символические ссылки на любые драйверы Mesa, которые вы решите использовать. Такое поведение гарантирует, что все программы, использующие Mesa, будут использовать одну и ту же самую последнюю версию. Утилита развертывания для каждого приложения запрашивает путь к каталогу, содержащему исполняемый файл приложения, имя исполняемого файла приложения (необязательно, оно может оставаться пустым, но если указано, это может заставить некоторые программы использовать Mesa3D, если в противном случае они не будут), если приложение 64-разрядное или 32-битная версия и необходимые драйверы. Имена 32-битных приложений помечаются в диспетчере задач во время работы. Большинство приложений будут использовать Mesa независимо от возможностей графического процессора, но некоторые приложения могут быть достаточно умными, чтобы загружать OpenGL только из системного каталога. При указании имени файла приложения создается файл .local в попытке заставить приложение использовать Mesa3D, когда оно этого не хочет. Кроме того, для решения этой проблемы можно использовать Mesainjector Федерико Доссены. Инструкции по сборке Mesainjector.
Старым приложениям начала 200x и старше может потребоваться набор переменных среды MESA_EXTENSION_MAX_YEAR, см. раздел совместимости устаревшего программного обеспечения.
Приложениям, требующим OpenGL 3.2 или новее, может потребоваться переопределение конфигурации контекста OpenGL.
Примеры переопределения конфигурации контекста OpenGL, переключения на другие драйверы и совместимости старых приложений доступны здесь.
Официальная документация Mesa3D доступна здесь.
Развертывание OpenCL ICD осуществляется путем регистрации файла ICD в среде выполнения OpenCL системы (например, opencl.dll
из Windowssystem32
). Если у вас нет системной среды выполнения OpenCL, вы можете получить ее, установив среду выполнения Intel OpenCL CPU. Это работает и для процессоров AMD.
Развертывание драйверов Vulkan выполняется через среду выполнения Vulkan с использованием метода обнаружения ICD. Обратите внимание, что среда выполнения Vulkan поставляется в комплекте с графическими драйверами, поддерживающими Vulkan, поэтому установка вручную может не потребоваться.
Запустите общесистемное развертывание и выполните операцию удаления, если она доступна, затем выйдите;
Загрузите и запустите инструмент Everything (любой вариант должен работать);
Запустите инструмент развертывания каждого приложения и оставьте его включенным;
В инструменте «Все» в текстовом поле под меню введите libgallium_wgl.dll attrib:L
и оставьте инструмент «Все» включенным;
Для каждого результата поиска в инструменте «Все»:
откройте его местоположение в проводнике Windows с помощью пункта контекстного меню «Открыть путь» или «Открыть местоположение файла»;
найдите файлы *.local и удалите их, но только если вы уверены, что указали имя файла при развертывании в это место;
скопировать местоположение из адресной строки и передать его в инструмент развертывания приложений;
отправьте «нет» всем развертываниям, пока вас не попросят выполнить дополнительные развертывания, отправьте «да» там.
Повторите шаги 4 и 5, используя имена файлов osmesa.dll и graw.dll соответственно, так же, как это было сделано для libgallium_wgl.dll;
Закрытие для каждого развертывания приложений и инструменты Everything;
Отмените любые изменения в реестре и все переменные среды, которые настраивают среду выполнения Vulkan для использования любого из драйверов Mesa3D Vulkan. См. примечания по использованию, чтобы узнать, какие потенциальные изменения вам, возможно, придется отменить;
Повторите шаг 8, но для OpenCL.
ВНИМАНИЕ: Программы, для которых определенные файлы были перезаписаны инструментом развертывания отдельных приложений, могут нуждаться в переустановке/восстановлении. Средство развертывания каждого приложения обнаруживает этот сценарий развертывания и предупреждает об этом, начиная с версии 22.0.0.
Старым приложениям начала 200x и старше может потребоваться установка переменной среды MESA_EXTENSION_MAX_YEAR, чтобы избежать переполнения буфера. Он ожидает номер года в качестве значения, чаще всего используется 2001. Он урезает список расширений, возвращаемый Mesa3D, до расширений, выпущенных до указанного года включительно, поскольку список расширений Mesa3D сортируется по году.
Пример: set MESA_EXTENSION_MAX_YEAR=2001
. См. раздел «Как установить переменные среды».
С выпуском OpenGL 3.1 многие функции, помеченные как устаревшие в OpenGL 3.0, были удалены, и с момента запуска OpenGL 3.2 эта ветвь спецификации OpenGL известна как основной профиль OpenGL. Также в OpenGL 3.3 была представлена новая ветвь спецификации OpenGL, известная как контекст прямой совместимости, которая удаляет устаревшие функции OpenGL 3.0, которые не были удалены в OpenGL 3.1. В большинстве проприетарных драйверов реализованы исключения из этих изменений, предлагаемые в виде расширения GL_ARB_compatibility для OpenGL 3.1 и контекстов совместимости для OpenGL 3.2 и выше. Из-за сложности и особенно отсутствия правильных тестов реализации GL_ARB_compatibility и контекстов совместимости разработчики Mesa3D решили отложить работу в этой области до тех пор, пока в Mesa 18.1 не будет реализована поддержка GL_ARB_compatibility, а затем в Mesa 21.3 поддержка контекстов совместимости будет включена в OpenGL 4.5 для llvmpipe. В заключение, программы, запрашивающие контекст совместимости OpenGL, не будут работать выше OpenGL 3.0 для Mesa 18.0, 3.1 для Mesa 18.1 и 4.5 для Mesa 21.3 и новее. К сожалению, такого рода программы широко распространены в Windows, где разработчики склонны избегать использования контекстных флагов, требуемых основным профилем. К счастью, Mesa3D предоставляет механизм переопределения запрошенного контекста OpenGL. Есть две переменные среды, которые переопределяют конфигурацию контекста OpenGL:
MESA_GL_VERSION_OVERRIDE
Он используется для указания версии и типа контекста OpenGL. Он ожидает значение в следующем формате
OpenGLMajorVersion.OpenGLMinorVersion{FC|COMPAT].
FC означает контекст прямой совместимости. COMPAT означает контекст совместимости для OpenGL 3.2 и новее, а GL_ARB_compatibility включен для OpenGL 3.1. Отсутствие какой-либо строки после номера версии означает тип контекста Mesa3D по умолчанию для указанной версии OpenGL, который выглядит следующим образом: устаревшие функции включены для OpenGL 3.0, GL_ARB_compatibility включен для OpenGL 3.1, начиная с Mesa 18.1, и основной профиль для OpenGL 3.2 и выше. Примеры: 3.3FC означает контекст прямой совместимости с OpenGL 3.3, 3.1COMPAT означает OpenGL 3.1 с GL_ARB_compatibility, 3.2 означает основной профиль OpenGL 3.2. Значение по умолчанию для драйвера llvmpipe — 4.5COMPAT для Mesa>=21.3, 3.1COMPAT для Mesa>=18.1 и 3.0COMPAT для Mesa<=18.0.
Очень важной особенностью, предоставляемой этой переменной, является возможность настройки неполного контекста OpenGL. Программы могут запрашивать контекст OpenGL только до самого высокого уровня с сертификацией Khronos как полной из используемого драйвера Mesa3D. В настоящее время llvmpipe сертифицирован для OpenGL 4.5 во всех профилях OpenGL. В настоящее время swr и GLonD3D12 сертифицированы для OpenGL 3.3 в контексте основного профиля/прямой совместимости и 3.1 в профиле совместимости. Поддержка OpenGL зависит от базового драйвера Vulkan. Начиная с Mesa 17.3, распознаются значения, предназначенные для OpenGL 4.6.
MESA_GLSL_VERSION_OVERRIDE
Используется для указания версии языка штриховки. Поддерживаемые значения — это номера версий, преобразованные в целые числа: 110, 120, 130, 140. 150, 330, 400, 410, 420, 430, 440, 450 и 460. Значение 460 распознается только начиная с Mesa 17.3. Например, значение 130 соответствует GLSL 1.30. Всегда полезно синхронизировать контекст OpenGL и версии языка шейдеров, чтобы избежать путаницы в программах, которая может привести к сбоям или сбоям. Это может произойти потому, что большинство приложений полагаются на поведение проприетарных драйверов, обеспечивающих синхронизацию версий OpenGL и GLSL. Вот таблица корреляции OpenGL - GLSL. Значения по умолчанию для llvmpipe: 450 для Mesa 21.3, 140 для Mesa 18.1 и 130 для Mesa 18.0, если MESA_GL_VERSION_OVERRIDE не определен или соответствует основному профилю в противном случае.
В Windows самый простой способ установить переменные среды — написать пакетные файлы. Скорее всего, вам придется сделать это:
для каждого приложения, требующего более высоких версий OpenGL и GLSL, чем те, которые предоставляются выбранным драйвером Mesa3D по умолчанию;
если вы хотите выбрать драйвер не по умолчанию для настольного OpenGL;
если вам нужно урезать список расширений для совместимости со старыми программами.
Просто откройте Блокнот и напишите пакетный скрипт. При сохранении завершите имя файла расширением .bat или .cmd, измените тип сохранения для всех файлов и измените место сохранения на то, где находится исполняемый файл приложения. Если у вас есть некоторые навыки работы с пакетными сценариями, вы можете изменить текущий каталог во время выполнения сценария с помощью команды CD, открывая возможность сохранить сценарий в любом месте, как показано в примерах rpcs3 и GPU Caps Viewer. Документация по большинству переменных среды, используемых Mesa, доступна здесь. Полные примеры доступны здесь.
Вы можете установить несколько переменных среды в одном пакетном скрипте, чтобы смешивать функциональные возможности, предоставляемые Mesa3D.