Transferências
Patrocínio
Problemas conhecidos
Diferenças entre pacotes MSVC e MinGW
Conteúdo do pacote Mingw e MSVC
Bibliotecas compartilhadas comuns OpenGL e OpenGL ES
Microsoft CLonD3D12, GLonD3D12, driver Dozen Vulkan e dependência comum D3D12 VA-API
Drivers OpenGL para desktop
Driver de renderização fora da tela OpenGL
Drivers OpenGL ES e biblioteca EGL
Drivers Vulkan
Drivers, compiladores e backends OpenCL
Drivers, bibliotecas e ferramentas Direct3D
Drivers VA-API
Biblioteca e ferramentas de teste
Pacotes de desenvolvimento
Pacotes de depuração
Construa você mesmo o Mesa3D
Instalação e uso
Notas de uso
Desinstalar Mesa3D
Compatibilidade de software legado
Substituição de configuração de contexto OpenGL
Como definir variáveis de ambiente
As compilações do Mesa 24.2.6 com Visual Studio e MSYS2 Mingw-w64 agora estão disponíveis na seção de lançamentos.
O projeto mesa-dist-win recebeu um patrocínio que foi estendido até 1º de novembro de 2024. O patrocínio consiste em um VPS gratuito em nó francês para usar como máquina de construção com 12 GB de RAM, 6 threads AMD EPYC 7763 e SSD NVMe de 150 GB da Petrosky, uma empresa de hospedagem de servidores virtuais privados graças a @ Directox01.
Esta é uma lista de todos os problemas comumente encontrados com soluções ou soluções alternativas conhecidas. Uma versão específica é afetada apenas por um subconjunto delas.
Erro ausente libgallium_wgl.dll
com Mesa3D OpenGL ES e drivers OpenGL de desktop
Isso é encontrado em implantações existentes por aplicativo feitas com 21.2.x ou anterior ao atualizar para 21.3.0 ou mais recente. Basta refazer a implantação do aplicativo para corrigi-lo. A separação do megadriver de gálio do opengl32.dll
foi uma mudança muito invasiva que as implantações existentes por aplicativo não tiveram chance. Se você não se lembra se um programa afetado é de 32 ou 64 bits, clique com o botão direito no atalho opengl32.dll
na pasta onde o executável do programa está localizado e selecione abrir local do arquivo. Se a localização terminar em x64, será de 64 bits; caso contrário, será de 32 bits.
Erro ausente libEGL.dll
com Mesa3D OpenGL ES
Isso é encontrado em implantações existentes por aplicativo feitas com 21.2.x ou anterior ao atualizar para 21.3.0 ou mais recente. Basta refazer a implantação do aplicativo para corrigi-lo. O suporte EGL foi uma mudança muito invasiva que as implantações existentes por aplicativo não tiveram chance. Se você não se lembra se um programa afetado é de 32 ou 64 bits, clique com o botão direito no atalho opengl32.dll
na pasta onde o executável do programa está localizado e selecione abrir local do arquivo. Se a localização terminar em x64, será de 64 bits; caso contrário, será de 32 bits.
Erro ausente libvulkan-1.dll
com Mesa3D opengl32.dll
do pacote de lançamento MinGW
Somente versões anteriores a 22.2.0 para as quais o driver zink foi criado com o grupo de pacotes MSYS2 MinGW-W64 vulkan-devel são afetadas. Execute fix-libvulkan-1.dll-missing-error.cmd
do pacote de lançamento MinGW para corrigi-lo. Esta ferramenta oferece suporte à execução autônoma por meio da opção de linha de comando auto
. Esta ferramenta só é incluída no pacote de lançamento do MinGW quando necessária, caso contrário, está faltando intencionalmente. A decisão de usar este SDK Vulkan em vez do LunarG é feita com base no que vem com carregadores e cabeçalhos mais recentes.
Binários de 64 bits em pacotes MSVC e MinGW requerem uma CPU com AVX, embora não devessem
Isso não é mais um problema no Mesa 22.0 ou mais recente. Esse problema é causado por binários de 64 bits contendo driver swr que vaza o uso do AVX em código comum. Este é um bug upstream relatado aqui, aqui e aqui.
Mesa opengl32.dll
do pacote MinGW depende do tempo de execução do Vulkan desde 21.0.0
Isso foi corrigido em 22.2.0 contendo este requisito para o uso explícito do driver zink. Esta é uma regressão upstream introduzida quando o driver zink foi corrigido para oferecer suporte ao Windows.
Os programas podem se comportar como se não houvesse suporte para OpenGL ao usar Mesa opengl32.dll
desde 21.0.0
Isto não é um defeito, mas sim uma mudança de comportamento do Mesa quando as variáveis de ambiente são configuradas incorretamente. Geralmente acontece ao selecionar um driver Mesa que não existe no pacote de lançamento usado ou falha na inicialização devido ao sistema host não atender aos requisitos de hardware ou faltar dependências. A leitura das diferenças entre os pacotes MSVC e MinGW e o conteúdo dos pacotes Mingw e MSVC deve ajudar na solução de problemas.
Notas importantes sobre erros relacionados à falta de libglapi.dll
Você pode experimentá-los com programas que usam qualquer driver OpenGL de desktop Mesa3D por meio da ferramenta de implantação por aplicativo, a implantação em todo o sistema não é afetada. Você pode enfrentá-los se a implantação por aplicativo tiver sido feita antes da introdução do suporte compartilhado ao glapi. O glapi compartilhado está consistentemente disponível em pacotes MSVC e MinGW desde 20.0.2.
Para corrigir esses erros, independentemente da causa, é necessário reimplantar. Se você não se lembra se um programa afetado é de 32 ou 64 bits, clique com o botão direito no atalho opengl32.dll
na pasta onde o executável do programa está localizado e selecione abrir local do arquivo. Se a localização terminar em x64, será de 64 bits; caso contrário, será de 32 bits.
O mesmo problema com a mesma solução se aplica ao osmesa se você estiver atualizando da versão 17.3.5.501-1 ou anterior.
O pacote MinGW requer uma CPU com SSSE3 com o benefício de fornecer aumento de desempenho de 3 a 5% com drivers de renderização de software;
d3d10sw introduzido em 21.2.0 está disponível apenas no pacote MSVC.
Se você precisar migrar de binários Mingw para MSVC, você só precisa substituir a pasta de binários Mesa do pacote Mingw pela contraparte MSVC.
Os seguintes drivers Mesa3D e artefatos de compilação são fornecidos em cada versão:
Biblioteca compartilhada GLAPI. Nome do arquivo: libglapi.dll
. Sua presença é necessária ao fornecer suporte a OpenGL e OpenGL ES. O renderizador fora da tela Mesa3D e todos os drivers Mesa3D OpenGL e OpenGL ES dependem dele quando presentes. Desde 20.0.2 está disponível nos pacotes MSVC e MSYS2 Mingw-w64.
Megadriver Gálio OpenGL. Nome do arquivo: libgallium_wgl.dll
. Quando presente, ele contém todos os drivers OpenGL de desktop Mesa3D em vez de opengl32.dll
. Ele estreou em 21.3.0. A biblioteca Mesa3D EGL e os drivers OpenGL ES dependem dela quando presentes.
Tempo de execução Mesa3D WGL. Nome do arquivo: opengl32.dll
. Ele costumava conter todos os drivers OpenGL de desktop Mesa3D e OpenGL ES dependia dele, mas desde 21.3.0 foi reduzido a ser apenas um carregador para megadriver OpenGL de gálio, portanto, apenas programas que usam drivers OpenGL de desktop Mesa3D por meio de implantação por aplicativo dependem dele agora.
DirectX IL para redistribuição. Nome do arquivo: dxil.dll
. Este binário redistribuível é fornecido no Windows SDK e no DirectX Shader Compiler e empacotado durante o processo de lançamento. As ferramentas de implantação instalam-no conforme necessário.
llvmpipe. llvmpipe é um renderizador de software Desktop OpenGL destinado a ser um substituto quando a aceleração de hardware não é possível. Ele só suporta jogos muito leves com bom desempenho. Este é o driver OpenGL de desktop Mesa3D padrão quando GLonD3D12 está indisponível ou falha ao carregar. Está disponível para x86 e x64 como parte do pacote Mesa3D Desktop OpenGL opengl32.dll
ou libgallium_wgl.dll
se o último estiver disponível. Quando não for o driver padrão, selecione-o definindo a variável de ambiente GALLIUM_DRIVER=llvmpipe
.
softpipe é uma implementação de referência de um renderizador de software Desktop OpenGL sem foco no desempenho de jogos. Está disponível para x86 e x64 como parte do pacote Mesa3D Desktop OpenGL opengl32.dll
ou libgallium_wgl.dll
se o último estiver disponível. Selecione-o definindo a variável de ambiente GALLIUM_DRIVER=softpipe
.
GLonD3D12. Está disponível para x86 e x64 no pacote MSVC e desde 22.2.0 no pacote MinGW, bem como parte do pacote Mesa3D Desktop OpenGL opengl32.dll
ou libgallium_wgl.dll
se o último estiver disponível e anterior a 22.3.0 como openglon12.dll
independente também. Além de exigir oficialmente o Windows 10 v10.0.19041.488 ou mais recente, ele também depende do DirectX IL para redistribuição - dxil.dll
para carregar, que pode ser instalado por meio de ferramentas de implantação. Quando disponível e se puder ser carregado, este é o driver OpenGL de desktop Mesa3D padrão em sistemas acelerados por GPU D3D12. Este driver introduzido em 21.0.0 está operando como wrapper retornando chamadas de API D3D12. Devido a esta natureza, ele pode usar aceleração de GPU. Se não estiver selecionado por padrão, você pode testá-lo com o renderizador de software Direct3D WARP integrado ao Windows, definindo as variáveis de ambiente GALLIUM_DRIVER=d3d12
e LIBGL_ALWAYS_SOFTWARE=1
. A cópia autônoma não precisa da configuração de GALLIUM_DRIVER=d3d12
e só pode ser instalada por meio da ferramenta de implantação em todo o sistema. O pacote autônomo GLonD3D12 e Mesa3D Desktop OpenGL substituem um ao outro ao usar a ferramenta de implantação em todo o sistema, mas você pode reverter isso a qualquer momento.
zinco. Este driver introduzido no pacote MinGW em 21.0.0 e no pacote MSVC em 21.2.0 está disponível para x86 e x64 como parte do pacote Mesa3D Desktop OpenGL opengl32.dll
ou libgallium_wgl.dll
se o último estiver disponível. Da mesma forma que o GLonD3D12, ele opera como wrapper retornando chamadas de API Vulkan. Devido a esta natureza, ele usa aceleração de GPU por padrão, mas também suporta renderização de software. Selecione-o por meio da variável de ambiente GALLIUM_DRIVER=zink
, mas observe que ele requer pelo menos 1 dispositivo Vulkan e carregador/tempo de execução Vulkan para inicializar. zink ignorou dispositivos do tipo CPU Vulkan por padrão até 22.1.0. Hoje em dia ele usa um sistema de prioridade que seleciona automaticamente um dispositivo do tipo CPU Vulkan se não existir nenhum dispositivo do tipo Vulkan de prioridade mais alta. Você pode testar o zink com dispositivos do tipo CPU Vulkan apenas definindo LIBGL_ALWAYS_SOFTWARE=1
(Mesa 22.1.0 e mais recente) ou ZINK_USE_LAVAPIPE=true
(obsoleto no Mesa 22.1.0).
swr. Este driver não está mais disponível no Mesa 22.0 e versões mais recentes. Nomes de arquivo: swrAVX.dll
, swrAVX2.dll
, swrSKX.dll
, swrKNL.dll
. Mesmo que resida fora do pacote OpenGL do Mesa3D Desktop opengl32.dll
ou libgallium_wgl.dll
se o último estiver disponível, ainda depende dele. Este driver de renderização de software OpenGL alternativo para desktop desenvolvido pela Intel é otimizado para software de visualização. Está disponível no pacote MSVC e desde 20.1.7 também no pacote MinGW. Ele suporta apenas x64, x86 não é oficialmente compatível. Existem atualmente 4 DLLs, apenas uma sendo carregada com base no que a CPU do usuário pode fazer. Você pode mudar para swr definindo o valor da variável de ambiente GALLIUM_DRIVER como swr.
osmesa. Nome do arquivo: osmesa.dll
. Disponível para x86 e x64. Este driver é usado em casos especiais por software projetado para usar o código Mesa para renderizar sem qualquer tipo de sistema de janelas ou dependência de sistema operacional. Desde 21.0.0, apenas osmesa gálio permaneceu. Suporta OpenGL 3.xe mais recente. Desde 20.0.2, a integração do osmesa com drivers GLLES independentes está disponível em pacotes MSVC e MSYS2 Mingw-w64 que requerem libglapi.dll
no processo.
Biblioteca EGL. Nome do arquivo: libEGL.dll
. Biblioteca Mesa3D EGL usada pelos drivers OpenGL ES. Ele estreou em 21.3.0 e está disponível para aplicativos de 32 e 64 bits em pacotes MSVC e MSYS2. Depende do pacote OpenGL de desktop opengl32.dll
ou libgallium_wgl.dll
se o último estiver disponível.
Drivers independentes do OpenGL ES. Nomes de arquivo: libGLESv1_CM.dll
e libGLESv2.dll
. Drivers independentes OpenGL ES 1.x, 2.xe 3.x disponíveis para aplicativos de 32 e 64 bits. Desde 20.0.2 eles estão disponíveis nos pacotes MSVC e MSYS2 Mingw-w64. Eles dependem da biblioteca Mesa3D EGL, se disponível, e do pacote OpenGL de desktop opengl32.dll
ou libgallium_wgl.dll
se o último estiver disponível.
O driver de CPU lavapipe Vulkan está disponível em pacotes MSVC e MinGW desde 21.1.0. Nomes de arquivo: lvp_icd.x86_64.json
, lvp_icd.x86.json
, vulkan_lvp.dll
. Observe que alguns programas podem ignorar dispositivos do tipo CPU Vulkan propositalmente. Para obter informações sobre como implantar, consulte as notas de uso.
O driver Microsoft dúzia Vulkan está disponível desde 22.1.0 no pacote MSVC e desde 22.2.0 também no pacote MinGW. Este driver depende da API D3D12 para funcionar e pode usar aceleração de GPU em sistemas suportados. Nomes de arquivo: dzn_icd.x86_64.json
, dzn_icd.x86.json
, vulkan_dzn.dll
. Para obter informações sobre como implantar, consulte as notas de uso.
O driver Vulkan para gráficos AMD (radv) não está mais disponível desde 22.1.0 por sugestão do @zmike, pois não funcionará tão cedo. RADV estava disponível em pacotes MSVC e MinGW desde 21.2.0. O binário de 32 bits estava disponível desde o Mesa 22.0. Nomes de arquivo: radeon_icd.x86_64.json
, radeon_icd.x86.json
, libvulkan_radeon.dll
e vulkan_radeon.dll
. Para obter informações sobre como implantar, consulte as notas de uso.
Pilha Microsoft OpenCL. Nomes de arquivos: clon12compiler.dll
(compilador), openclon12.dll
(ICD) e WinPixEventRuntime.dll
(dependência somente x64). Esses componentes introduzidos em 21.0.0 são finalmente fornecidos por mesa-dist-win desde 21.3.0 (apenas compilador) e 21.3.6-2 respectivamente. O driver CLonD3D12 está disponível como um OpenCL ICD. Para obter informações sobre como implantar, consulte as notas de uso. CLonD3D12 requer oficialmente o Windows 10 v10.0.19041.488 ou mais recente e depende do DirectX IL para redistribuição - dxil.dll
para carregar, que pode ser instalado por meio de ferramentas de implantação. CLonD3D12 está operando como wrapper retornando chamadas de API D3D12. Devido a esta natureza, ele pode usar a aceleração de GPU D3D12, se disponível, caso contrário, a renderização de software WARP integrada do Windows será usada. Ao usar WARP CLonD3D12 usado para anunciar CL_DEVICE_TYPE_GPU, mas isso mudou em 23.0.0 para CL_DEVICE_TYPE_CPU, consulte microsoft/OpenCLOn12#19. Alguns programas ignoram drivers com CL_DEVICE_TYPE_CPU definido propositalmente. O comportamento antigo anterior à versão 23.0.0 pode ser restaurado desde a versão 24.0.3 do Mesa definindo o valor da variável de ambiente CLON12_WARP_IS_HARDWARE
como 1.
A pilha Clover OpenCL foi removida do pacote de lançamento em 22.1.1 até que o suporte do Windows seja finalizado, pois está inutilizável no momento. Nomes de arquivo: MesaOpenCL.dll
(ICD), OpenCL.dll
(tempo de execução independente) e pipe_swrast.dll
(carregador de pipe). O tempo de execução pode ser implantado com ferramenta de implantação por aplicativo desde 21.3.7 ou em versões mais antigas via copiar e colar junto com todos os carregadores de tubos disponíveis dos quais depende. Enquanto implantado, o tempo de execução oculta todos os outros ICDs OpenCL presentes no sistema e permite apenas que o software use o trevo Mesa3D como o único driver OpenCL. Para obter informações sobre como implementar o ICD, consulte as notas de uso.
O renderizador de software D3D10 está disponível no pacote MSVC desde 21.2.0. Nome do arquivo: d3d10sw.dll
. Este é um substituto para o Microsoft WARP e, infelizmente, não há uma maneira limpa de implantá-lo.
A ferramenta e biblioteca SPIR-V para DXIL estão disponíveis no pacote MSVC desde 21.0.0 e desde 22.2.0 também no pacote MinGW. Nomes de arquivo: libspirv_to_dxil.dll
, spirv_to_dxil.dll
e spirv2dxil.exe
.
Driver VA-API D3D12. Nomes de arquivo: vaon12_drv_video.dll
. Este driver foi disponibilizado em 22.3.0. Assim como GLonD3D12, CLonD3D12 e dúzia, este é um driver em camadas executado sobre a API Direct3D 12 para que possa usar aceleração de GPU, se disponível. As instruções de implantação foram documentadas pela Microsoft. A ferramenta de implantação por aplicativo foi atualizada para auxiliar nesse processo.
Interface bruta de gálio. Este componente obsoleto foi removido no Mesa3D 22.3.0. Nomes de arquivos: graw.dll
, graw_null.dll
. Este é um driver de gálio fictício sem nenhuma API gráfica usada principalmente para testes. Disponível para x86 e x64 e nas versões full (com suporte para sistema de janela) e headless (sem janela). Desde 20.0.2, ambas as versões com e sem janelas estão disponíveis nos pacotes MSVC e MSYS2 Mingw-w64.
conjunto de testes. Muitos testes de unidade executáveis.
Cabeçalhos e bibliotecas para compilações de 32 e 64 bits estão localizados em um arquivo separado chamado pacote de desenvolvimento.
A partir da versão 22.2.0, um pacote de informações de depuração MSVC contendo símbolos de depuração no formato PDB e um pacote de construção otimizado para depuração habilitado para declarações MinGW estão disponíveis. Os binários de depuração MinGW podem ser usados como substitutos imediatos para seus equivalentes de lançamento. Com o software usando a implantação por aplicativo, isso deve ser perfeito, mas para a implantação em todo o sistema, a reimplantação é necessária para mudar da versão para as compilações de depuração e vice-versa. Para obter mais informações sobre depuração MinGW, consulte debug/mingw-start-debugging.sh
As instruções de construção, se você quiser replicar minhas construções, estão disponíveis aqui.
Primeiro escolha entre o pacote Mingw e MSVC. Consulte a seção Diferenças entre pacotes MSVC e MinGW para obter detalhes. Antes de extrair o pacote de lançamento, feche todos os programas que usam o Mesa, se houver algum em execução. Após a extração você terá acesso a 2 opções de implantação, ambas localizadas no diretório em que você instalou o Mesa. Ambos os utilitários de implantação possuem um mecanismo de reinicialização para que você possa fazer todas as implantações necessárias em uma sessão. As ferramentas de implantação suportam apenas componentes OpenGL e OpenGL ES do Mesa3D mais OpenCL clover autônomo.
Uma ferramenta de implantação em todo o sistema. Embora seja destinado a sistemas sem suporte OpenGL acelerado por hardware, como máquinas virtuais em ambientes de nuvem, ele também pode ser usado em qualquer sistema Windows para substituir o driver OpenGL 1.1 de renderização de software de caixa de entrada, estendendo o suporte OpenGL para casos de uso em que OpenGL acelerado por hardware não está disponível, como conexões RDP . Devido a possíveis problemas com VMs Virtualbox executando Windows, é recomendado desabilitar a aceleração 3D em tais VMs se o driver OpenGL de desktop Mesa3D estiver instalado dentro delas usando a ferramenta de implantação em todo o sistema, consulte #9.
Uma ferramenta de implantação por aplicativo, usada para implantar o Mesa3D para um único programa, independentemente da presença ou não do suporte OpenGL acelerado por hardware. As alterações no utilitário de implantação por aplicativo são persistentes e são mantidas durante atualizações e reinstalações. O utilitário de implantação por aplicativo ajuda a economizar armazenamento e facilita as coisas, pois você não precisará copiar manualmente DLLs do diretório de instalação do Mesa, pois cria links simbólicos para quaisquer drivers do Mesa que você optar por usar. Esse comportamento garante que todos os programas que usam o Mesa usem a mesma versão atualizada. O utilitário de implantação por aplicativo solicita o caminho para o diretório que contém o executável do aplicativo, o nome do arquivo executável do aplicativo (opcional, pode permanecer em branco, mas se especificado pode forçar alguns programas a usar o Mesa3D quando não o fizerem), se o aplicativo for de 64 bits ou 32 bits e os drivers que você precisa. Os aplicativos de 32 bits têm seus nomes marcados no Gerenciador de Tarefas durante a execução. A maioria dos aplicativos usará o Mesa independentemente dos recursos da GPU, mas alguns aplicativos podem ser inteligentes o suficiente para carregar o OpenGL apenas do diretório do sistema. Ao fornecer o nome do arquivo da aplicação, um arquivo .local é gerado na tentativa de forçar a aplicação a usar o Mesa3D quando não deseja. Além disso, o Mesainjector de Federico Dossena também pode ser usado para solucionar esse problema. Instruções de construção para Mesainjector.
Aplicativos antigos do início de 200x e anteriores podem precisar do conjunto de variáveis de ambiente MESA_EXTENSION_MAX_YEAR, consulte a seção de compatibilidade de software legado.
Aplicativos que exigem OpenGL 3.2 ou mais recente podem precisar da substituição da configuração de contexto do OpenGL.
Exemplos sobre substituição de configuração de contexto OpenGL, mudança para outro driver e compatibilidade de aplicativos antigos estão disponíveis aqui.
A documentação oficial do Mesa3D está disponível aqui.
A implantação de OpenCL ICDs é feita através do registro do arquivo ICD com o tempo de execução do sistema OpenCL (por exemplo, opencl.dll
do Windowssystem32
). Se você não tiver o tempo de execução do sistema OpenCL, poderá obtê-lo instalando o tempo de execução da CPU Intel OpenCL. Também funciona para CPUs AMD.
A implantação de drivers Vulkan é feita por meio do tempo de execução Vulkan usando o método de descoberta ICD. Observe que o tempo de execução do Vulkan vem com drivers gráficos que suportam o Vulkan, portanto, instalá-lo manualmente pode não ser necessário.
Execute a implantação em todo o sistema e execute a operação de desinstalação, se disponível, e saia;
Baixe e execute a ferramenta Everything (qualquer versão deve funcionar);
Execute a ferramenta de implantação de cada aplicativo e deixe-a em execução;
Na ferramenta Everything, no campo de texto do menu, digite libgallium_wgl.dll attrib:L
e mantenha a ferramenta Everything em execução;
Para cada resultado de pesquisa na ferramenta Tudo:
abra sua localização no Windows Explorer por meio da opção de menu de contexto Open Path ou Open File location;
encontre arquivos *.local e remova-os, mas somente se tiver certeza de que especificou um nome de arquivo durante a implantação naquele local;
copie o local da barra de endereço e alimente-o por ferramenta de implantação de aplicativo;
envie não para todas as implantações até que seja solicitado a fazer mais implantações, envie sim para lá.
Repita as etapas 4 e 5 usando os nomes de arquivo osmesa.dll e graw.dll respectivamente, da mesma forma que foi feito para libgallium_wgl.dll;
Fechar por implantação de aplicação e ferramentas Everything;
Reverta quaisquer alterações de registro e quaisquer variáveis de ambiente que configurem o tempo de execução do Vulkan para usar qualquer um dos drivers Mesa3D Vulkan. Consulte as notas de uso para obter dicas sobre quais alterações potenciais você pode ter que reverter;
Repita a etapa 8, mas para OpenCL.
AVISO: Os programas para os quais determinados arquivos foram substituídos por uma ferramenta de implantação de aplicativo podem precisar de reinstalação/reparo. A ferramenta de implantação por aplicativo detecta e avisa sobre esse cenário de implantação desde 22.0.0.
Aplicativos antigos do início de 200x e anteriores podem precisar da variável de ambiente MESA_EXTENSION_MAX_YEAR definida para evitar estouros de buffer. Ele espera um número de ano como valor, mais comumente usado sendo 2001. Ele corta a lista de extensões retornada pelo Mesa3D para extensões lançadas até e incluindo o ano fornecido, pois a lista de extensões do Mesa3D é classificada por ano.
Ex: set MESA_EXTENSION_MAX_YEAR=2001
. Consulte Como definir variáveis de ambiente.
Com o lançamento do OpenGL 3.1, muitos recursos marcados como obsoletos no OpenGL 3.0 foram removidos e desde o lançamento do OpenGL 3.2, este ramo de especificação do OpenGL é conhecido como perfil principal do OpenGL. Também no OpenGL 3.3, foi introduzido um novo ramo da especificação OpenGL conhecido como contexto compatível com encaminhamento, que remove os recursos obsoletos do OpenGL 3.0 que não foram removidos no OpenGL 3.1. A maioria dos drivers proprietários implementou as isenções dessas mudanças oferecidas na forma de extensão GL_ARB_compatibility para OpenGL 3.1 e contextos de compatibilidade para OpenGL 3.2 e superior. Devido à complexidade e especialmente à falta de testes de implementação corretos para GL_ARB_compatibility e contextos de compatibilidade, os desenvolvedores do Mesa3D optaram por adiar o trabalho nesta área até que o Mesa 18.1 introduzisse o suporte a GL_ARB_compatibility e então o Mesa 21.3 aumentasse o suporte a contextos de compatibilidade para OpenGL 4.5 para llvmpipe. Concluindo, os programas que solicitam o contexto de compatibilidade OpenGL não passarão do OpenGL 3.0 para Mesa 18.0, 3.1 para Mesa 18.1 e 4.5 para Mesa 21.3 e mais recentes. Infelizmente, esse tipo de programa prevalece no Windows, onde os desenvolvedores tendem a evitar o uso de sinalizadores de contexto exigidos pelo perfil principal. Felizmente o Mesa3D fornece um mecanismo para substituir o contexto OpenGL solicitado. Existem 2 variáveis de ambiente que substituem a configuração do contexto OpenGL:
MESA_GL_VERSION_OVERRIDE
É usado para especificar a versão e o tipo do contexto OpenGL. Ele espera um valor no seguinte formato
OpenGLMajorVersion.OpenGLMinorVersion{FC|COMPAT].
FC significa um contexto compatível com encaminhamento. COMPAT significa um contexto de compatibilidade para OpenGL 3.2 e mais recente e GL_ARB_compatibility sendo habilitado para OpenGL 3.1. A ausência de qualquer string após o número da versão significa o tipo de contexto padrão do Mesa3D para a versão OpenGL especificada, que é o seguinte: recursos obsoletos habilitados para OpenGL 3.0, GL_ARB_compatibility habilitado para OpenGL 3.1 desde Mesa 18.1 e perfil principal para OpenGL 3.2 e superior. Exemplos: 3.3FC significa contexto compatível com OpenGL 3.3, 3.1COMPAT significa OpenGL 3.1 com GL_ARB_compatibility , 3.2 significa perfil principal do OpenGL 3.2. O valor padrão para o driver llvmpipe é 4.5COMPAT para Mesa>=21.3, 3.1COMPAT para Mesa>=18.1 e 3.0COMPAT para Mesa<=18.0.
Um recurso muito importante fornecido por esta variável é a possibilidade de configurar um contexto OpenGL incompleto. Os programas só podem solicitar o contexto OpenGL mais alto com certificação Khronos completa do driver Mesa3D em uso. Atualmente o llvmpipe é certificado para OpenGL 4.5 em todos os perfis OpenGL. Atualmente swr e GLonD3D12 são certificados para OpenGL 3.3 em perfil principal/contexto compatível com encaminhamento e 3.1 em perfil de compatibilidade. O suporte do zink OpenGL depende do driver Vulkan subjacente. Desde o Mesa 17.3, os valores destinados ao OpenGL 4.6 são reconhecidos.
MESA_GLSL_VERSION_OVERRIDE
Usado para especificar a versão do idioma de sombreamento. Os valores suportados são números de versão convertidos em números inteiros: 110, 120, 130, 140. 150, 330, 400, 410, 420, 430, 440, 450 e 460. O valor 460 só é reconhecido desde o Mesa 17.3. O valor 130, por exemplo, corresponde ao GLSL 1.30. É sempre uma boa ideia manter o contexto do OpenGL e as versões da linguagem de sombreamento sincronizadas para evitar confusão de programas que pode resultar em travamentos ou falhas. Isso pode acontecer porque a maioria dos aplicativos depende do comportamento de drivers proprietários de ter versões OpenGL e GLSL sincronizadas. Aqui está a tabela de correlação OpenGL - GLSL. Valores padrão para llvmpipe: 450 para Mesa 21.3, 140 para Mesa 18.1 e 130 para Mesa 18.0 se MESA_GL_VERSION_OVERRIDE for indefinido ou corresponder ao perfil principal, caso contrário.
No Windows, a maneira mais fácil de definir variáveis de ambiente é escrevendo arquivos em lote. Você provavelmente precisará fazer isso:
para cada aplicativo que requer versões OpenGL e GLSL superiores às expostas pelo driver Mesa3D selecionado por padrão;
se você deseja selecionar um driver não padrão para OpenGL de desktop;
se você precisar cortar a lista de extensões para compatibilidade de programas antigos.
Basta abrir o Bloco de Notas e escrever o script em lote. Ao salvar, termine o nome do arquivo com .bat ou .cmd, altere salvar como tipo para todos os arquivos e altere o local de salvamento para onde o executável do aplicativo está localizado. Se você tiver alguma habilidade com scripts em lote, poderá alterar o diretório atual durante a execução do script usando o comando CD, abrindo a possibilidade de salvar o script em qualquer lugar desejado, conforme mostrado nos exemplos de rpcs3 e GPU Caps Viewer. A documentação da maioria das variáveis de ambiente usadas pelo Mesa está disponível aqui. Exemplos completos estão disponíveis aqui.
Você pode definir várias variáveis de ambiente no mesmo script em lote para combinar a funcionalidade fornecida pelo Mesa3D.