AMDVLK: driver Vulkan open source da AMD já está oficialmente disponível


Recentemente, publicamos um artigo em que falávamos que a AMD abriria o código do seu driver Vulkan para a plataforma Linux, algo que muitos entusiastas do Linux aguardavam ansiosamente desde a estreia da Vulkan 1.0 há quase dois anos. Este dia finalmente chegou e, partir desta manhã, o código-fonte deste driver oficial da AMD, que está sendo chamado de "AMDVLK", agora está disponível publicamente, assim como a sua nova Platform Abstraction Layer (PAL).

O AMDVLK compartilha códigos com o driver Vulkan da AMD para Windows e, até agora, só estava disponível através do driver AMDGPU-PRO, que pode ser baixado através do site oficial da AMD. Esse driver de código aberto não deve ser confundido com o também open source "RADV", que é o driver Vulkan desenvolvido pela comunidade, que está presente no Mesa e que continua sendo desenvolvido independentemente da AMD.

Para evitar confusão com o projeto separado RADV, o nome do driver Vulkan oficial da AMD está sendo chamado de "AMDVLK" ou "AMD Open Source Driver for Vulkan". Pelo menos o AMDVLK é distintamente diferente do RADV.

Conheça a Platform Abstraction Layer (PAL)

Como mencionamos no nosso artigo anterior, o AMDVLK é construído separadamente do Mesa e não está usando nenhuma API do Mesa, Gallium, NIR ou de qualquer outra coisa que faça parte do projeto Mesa. Isso acontece porque este driver Vulkan foi projetado com cross-platform e com outras APIs da AMD internas em mente.

O AMDVLK baseia-se na biblioteca Platform Abstraction Library (PAL), da AMD, que é um componente compartilhado que encapsula alguns detalhes de programação de hardware e sistema operacional em vários drivers da AMD. Basicamente, uma camada de abstração de hardware que torna o driver mais versátil em GPUs e sistemas operacionais, além de permitir maior código de uso de sequências de programação específicas de hardware em diferentes APIs. PAL fica abaixo do drivers Vulkan, Direct3D e OpenGL.

De acardo com o site Phoronix, agora a Platform Abstraction Layer é de código aberto e os desenvolvedores do driver RadeonSI (driver OpenGL) também podem acabar escolhendo para reutilizá-la por ter essas sequências de programação de hardware unificadas, por exemplo. Veremos se PAL oferecerá algum benefício para o atual driver Radeon desenvolvido pela comunidade, como a de corrigir algumas regressões, mas pode ajudar a criar suporte de hardware de próxima geração devido à reutilização do código.

Atualmente, parece que o AMDVLK ainda não pode ser compilado com a base de código LLVM upstream atual, mas isso deve ser corrigido em breve, permitindo que os desenvolvedores empacotem o driver e que disponibilizem nos repositórios de diversas distribuições Linux.

Abaixo está um diagrama fornecido pela AMD mostrando que o AMDVLK se encaixa entre a biblioteca libvulkan e como dentro do AMDVLK se encaixa o SPIR-V, LLPC, LLVM, e o PAL, finalmente, comunicando-se com o código libdrm do AMDGPU para interface com o driver de kernel AMDGPU Direct Rendering Manager.

Como o AMDVLK se encaixa na pilha de drivers do Linux.

Hardwares suportados pelo AMDVLK

Assim como acontece com o AMDGPU-PRO e semelhante ao RADV, o driver AMDVLK suporta placas de vídeo a partir da série Radeon HD 7000 "GCN 1.0". Mas, novamente, como acontece com o RADV e AMDGPU-PRO, o AMDVLK/PAL só se interage com o libdrm AMDGPU no Linux, então você precisa usar o driver AMDGPU DRM.

Então, se você estiver usando o driver Radeon DRM como o padrão com hardware GCN 1.0/1.1, você precisará habilitar o AMDGPU DRM. Obviamente, se você estiver em uma GPU mais recente (GCN 1.2+), você não precisará de alterações do kernel, pois o AMDGPU é o driver DRM em uso. Confira abaixo uma lista com os hardwares suportados:
  • Radeon™ HD 7000 Series
  • Radeon™ HD 8000M Series
  • Radeon™ R5/R7/R9 200/300 Series
  • Radeon™ RX 400/500 Series
  • Radeon™ M200/M300/M400 Series
  • Radeon™ RX Vega Series
  • AMD FirePro™ Workstation Wx000/Wx100/Wx300 Series
  • Radeon™ Pro WX x100 Series
  • Radeon™ Pro 400/500 Series
Os recursos do AMDVLK

Como principais recursos para esta versão atual do AMDVLK, a AMD destaca a conformidade com a Vulkan 1.0, mais de 30 extensões Vulkan, o suporte para Radeon GPU Profiler, ferramentas de depuração integradas, suporte de virtualização SR-IOV e muito mais. No futuro, a empresa esta'planejando continuar a se adaptar às mudanças upstream da Vulkan, fornecer suporte de contador de desempenho de hardware através do RenderDoc, otimizações para a LLPC para melhorar os tempos de compilação e desempenho da GPU, bem como otimizações para melhorar o desempenho com a CPU.

O código fonte do AMDVLK

O código fonte do AMDVLK está hospedado e sendo desenvolvido no GitHub por meio do GPUOpen-Drivers. A AMD dividiu o código em três repositórios, incluindo LLVM, XGL e um repositório separado com o código PAL. O código do AMDVLK e os recursos AMD relacionados estão sob a licença MIT. A AMD vai receber contribuições da comunidade para PAL e AMDVLK.

Com isso, as contribuições do código comunitário devem ser puxadas para a árvore interna da AMD e depois disponibilizadas no repositório open source nas futuras atualização, que podem acontecer semanalmente.

Usando o AMDVLK

Compilar o AMDVLK e seus componentes requer as dependências de compilação padrão, como o Python 3, CMake, Curl, as dependências comuns X11/XCB e, obviamente, o Vulkan SDK também. A AMD publicará em breve instruções de compilação precisas para os sistemas Red Hat e Ubuntu para aqueles que desejam experimentar o driver AMDVLK por conta própria.

Por enquanto, a AMD apenas lista o Ubuntu 16.04.3 LTS e o Red Hat Enterprise Linux 7.4 como sistemas operacionais suportados. Vale ressaltar também que o AMDVLK depende do Direct Rendering Infrastructure 3 (DRI3) sendo habilitado pelo driver DDX em execução.

O código que está sendo aberto hoje é algumas semanas mais novo do que o atualmente disponível no driver AMDGPU-PRO 17.50.

Vulkan ICD

Graças ao Vulkan ICD (Installable Client Driver), o driver AMDVLK compilado para ser instalado no sistema simplesmente se resume ao driver amdvlk64.so (e amdvlk32.so, se você desejar o suporte Vulkan de 32 bits) e, em seguida, o arquivo AMD Vulkan ICD no formato JSON.

Basicamente, o driver AMDVLK pode co-existir no mesmo sistema operacional com o RADV sem muito problema. Você pode simplesmente mover o arquivo ICD para fora do diretório padrão e, em seguida, usar magicamente o RADV. Isso facilita a depuração ou se você deseja executar alguns jogos no AMDVLK e outros no RADV, por exemplo. Pelo menos, é melhor do que o cenário atual dos drivers OpenGL com a libGL (ignorando o GLVND), entre outras complicações.

O AMDVLK também suporta um arquivo de configuração "amdPalSettings.cfg", presente no diretório /etc/amd/, para ativar e desativar shader cache no disco, alguns parâmetros para verificar o desempenho da CPU e outros ajustes.

AMDVLK vs. RADV

AMDVLK e RADV são quase que comparáveis em termos de características. O RADV possui algumas extensões que o AMDVLK não tem, enquanto que o driver oficial da AMD possui uma série de extensões específicas da AMD, suporte a SR-IOV, suporte para Radeon GPU e outras funcionalidades atualmente não encontradas no RADV. Além disso, o AMDVLK provavelmente está oferecendo mais desempenho do que o RADV nos jogos atuais no Linux.

Só o tempo dirá qual dos dois drivers se tornará o queridinho para os jogadores Linux. O RADV tem um melhor começo devido ao seu código fonte ser aberto desde o início, além de ser facilmente empacotado com o Mesa e está funcionando bem em todos os jogos Vulkan atuais (por exemplo, o AMDVLK atualmente possui algumas problemas com Dawn of War III e F1 2017).

Mas o AMDVLK continuará sendo mantido pela AMD, já que possui o seu código Vulkan derivado do driver para Windows, por exemplo. Alem disso, com o seu código aberto, o AMDVLK começará a trabalhar com o LLVM upstream para que seja possível empacotá-lo facilmente, além de possuir seu código sempre atualizado com a ajuda da comunidade.

E você, o que achou da novidade? Fique ligado para mais novidades nós próximos dias, como benchmarks para comparar o desempenho do AMDVLK e RADV.


FONTE: Phoronix
IMAGEM: Phoronix

Comentários