Gallium Nine: o vovô do DXVK

Antes, ressalvas

  • Só há suporte até o DirectX9, nada de 10, 11 ou 12. Porém, isso já dá um aumento de compatibilidade e desempenho para o grande acervo de jogos da oitava geração e anteriores que rodariam no Windows XP.
  • O Gallium Nine exige drivers de código aberto. Se tiver uma placa Nvidia antiga sem Vulkan, terá que abrir mão do driver proprietário. Não é tão ruim assim, dá para recuperar mais de 80% do desempenho configurando o reclocking.
  • Se seu hardware tem suporte nativo e completo a Vulkan (placas da AMD que suportam o driver AMDGPU, Nvidia da série Kepler e posterior, Intel HD Graphics 500 e posterior), compensa mais usar DXVK do que o Gallium Nine. A comunidade que desenvolve o Gallium Nine foca em GPUs antigas, especialmente as Radeons antes da AMD adquiri-la. Eu fiz esse guia por curiosidade pois tenho um laptop antigo (Intel i3-3120M) dando sopa aqui e tive a ideia de testar isso.

O que é o Gallium Nine?

O Wine desde tempos imemoriais traduz DirectX para OpenGL. E se cortássemos o intermediário e rodássemos o DirectX diretamente no Linux?

Foi o que os visionários do projeto Gallium Nine se perguntaram no início dos anos 2010. O objetivo do projeto era rodar DirectX9 em cima do Mesa do Linux no mesmo nível do OpenGL. O fato dele exigir drivers de código aberto, no entanto, na época diminuiu a visibilidade dele, e em tempos modernos de Proton e Steam Deck, ter o Vulkan como alvo é mais simples Valve e para as distribuições, além de ser compatível com Nvidia, com desempenho praticamente igual ao Gallium Nine.

Porém, ainda há um nicho que somente o Gallium Nine atende: jogar em placas antigas mantidas vivas pelo Linux e que já perderam suporte no Windows. Para quem não quer nem deixar a máquina desconectada da internet para um “retro-gamer PC” seguro, nem fazer upgrade, ele é uma boa pedida.

Instalando o Gallium Nine no Wine

wine-nine-standalone é a ponte que permite o Wine acessar o Gallium Nine. Instale no seu prefixo com winetricks galliumnine.

Algumas distribuições como o Arch e Gentoo fornecem um pacote chamado wine-nine que adiciona-o automaticamente a todos os prefixos que você criar depois de instalado, mas há relatos de bugs específicos que só acontecem com pacotes de distribuição e eu mesmo experienciei isso e tive de recorrer ao winetricks. Não recomendaria utilizá-los.

Para confirmar que ele funciona, depois de instalar, rode wine ninewinecfg e garanta que as três caixas da seção “Install state” estão checadas:

Possíveis causas de erro que fazem as caixas não serem checadas:

  • Loading of d3dapdater9 succeeded: Caso essa caixa não esteja marcada, provavelmente a sua distribuição “fatia” o Mesa para economizar espaço durante a instalação, e a porção do Gallium Nine que deve rodar no Linux foi separado em um pacote próprio. No caso do Debian/Ubuntu, é sudo apt install libd3dadapter9-mesa. Isso, ou você usa o driver proprietário da Nvidia, em que não é possível rodar o Gallium Nine.
  • d3d9-nine.dll is loadable deve sempre estar marcado se a caixa de cima estriver também; se não, reinstale com winetricks -f galliumnine.
  • Creating a Direct3D 9 Device: Se as duas caixas de cima estiverem marcadas mas não essa, provavelmente você está em uma distribuição LTS e o Mesa que você está rodando um driver “diferentão” que não é compatível com o Gallium Nine¹. Todos os drivers “diferentes” foram removidos no Mesa 21.3, no entanto, então distribuições rolling-release, ou de LTS de depois de 2023, ou mais antiga com PPAs atualizando o Mesa, não vão ter esse problema².

Se sua máquina for de 64 bits, é importante também rodar também wine c:/windows/syswow64/ninewinecfg.exe e conferir se o suporte 32 bits está configurado corretamente:

Observe que o caminho em Loading of d3dadapter9 é diferente.

Se a versão de 64 bits estiver OK, mas a de 32 não, pode ser necessário que estejam faltando as versões de 32 bits dos pacotes no lado do Linux (lib32-mesa no Arch, libd3dadapter9-mesa:i386 no Ubuntu/Debian, etc.).

Se essas 3 caixas estiverem marcadas em ambas as configurações, a de cima, Enable Gallium Nine for better D3D9 graphical performance, provavelmente vai estar também, daí só correr pro abraço.


Se quiser confirmar que realmente está rodando pelo Gallium Nine, o seguinte texto vai aparecer em verde nos logs:

Native Direct3D 9 [VERSÃO DO WINE-NINE] is active.
For more information visit https://github.com/iXit/wine-nine-standalone

image


¹Pode ser que nem seja necessário atualizar o Mesa, usando a variável de ambiente MESA_DRIVER_LOADER_OVERRIDE. Por exemplo, nas HD Graphics sem Vulkan (2000-5000), pode-se usar MESA_DRIVER_LOADER_OVERRIDE=crocus para forçar o driver compatível com o Gallium Nine – porém, ele era experimental nas versões do Mesa que atualmente estão nas distros LTS, podendo haver resultados indesejados.
²A não ser que você tenha sido orientado a instalar o mesa-amber, que é o pacote que restaura os drivers removidos.

9 curtidas

Legal! Muito útil. Vai ajudar bastante gente, penso eu. Parabéns!

1 curtida

@Capezotte vc tem uma maquina antiga a esse ponto? eu acho que meu notebook velho vai se beneficiar disso, ele não tem Vulkan.

Em antecipação à remoção definitiva do Gallium Nine, que ocorrerá no lançamento do Mesa 25.2, ele já foi removido da base Arch. A depreciação tinha sido anunciada 10/04, menos de um mês depois que eu publiquei esse guia :pensive_face: . O Gallium Nine andava a passos glaciais (especialmente depois do D9VK e depois o DXVK roubar a cena) e decidiram que não fazia mais sentido mantê-lo no Mesa.

Com isso, GPUs com Vulkan se tornam a linha de base para jogar via Wine no Linux. Não que sejam GPUs super novas (as mais antigas são de 2012 da AMD, 2014 da Nvidia e 2015 da Intel), mas não deixa de ser triste porque ainda há um tanto de hardware mais antigo que isso, ainda capaz para tarefas básicas, além de placas integradas em chips ARM atuais sem Vulkan, que conseguiria rodar um ou outro joguinho leve com o Gallium Nine.

Distribuições LTS com Mesas mais antigos ainda permitirão o uso do Gallium Nine no médio prazo, mas salvo se alguém resgatar o código e desmembrá-lo para torná-lo um pacote próprio, a tendência é se tornar cada vez menos conveniente nos próximos anos.

1 curtida

Muito bem escrito e muito útil. Parabéns!

Alguém aqui conseguiu instalar e usar o Gallium Nine através do Bottles? Aqui eu tenho dois problemas. Em um prefixo x86 o ninewinecfg não detecta a lib x86 instalada no sistema, apesar de eu ter instalado o pacote libd3dadapter9-mesa:i386 (retorna esse mesmo erro). Em um prefixo x64 o ninewinecfg retorna sucesso quando aberto, mas quando carrego o jogo FlatOut 1 não há nenhuma indicação no terminal de que o Gallium Nine foi carregado, imagino que porque o jogo tenha um executável 32 bits. Eu utilizo o Bottles por ter uma interface gráfica fácil de ser usada, mas gostaria de jogar alguns jogos antigos de Windows no meu PC velho utilizando o Gallium Nine para obter mais desempenho, se alguém tiver alguma recomendação do que fazer ou de outra forma semelhante ao Bottles para utilizar o wine facilmente, eu agradeço.

O Bottles está em Flatpak, ou é nativo? O Flatpak não utiliza o Mesa do sistema e sim o do runtime do Flatpak; logo instalar um pacote no sistema não vai instalá-lo na sandbox.

Não sei se dá para fazer gambiarras aqui, e acho bem estranho o de 64-bits estar presente e o de 32 não.

Acredito que sua análise da causa esteja correta. Chegou a rodar o ninewinecfg do syswow64?

1 curtida