O driver de código aberto AMD para Vulkan® é um driver Vulkan de código aberto para adaptadores gráficos Radeon™ no Linux®. Ele é construído sobre a Platform Abstraction Library (PAL) da AMD, um componente compartilhado projetado para encapsular determinados detalhes de programação específicos de hardware e sistema operacional para muitos dos drivers 3D e de computação da AMD. Aproveitar o PAL pode ajudar a fornecer uma experiência consistente em todas as plataformas, incluindo suporte para GPUs lançadas recentemente e compatibilidade com ferramentas de desenvolvedor da AMD.
Os shaders que compõem um objeto VkPipeline
específico são compilados como uma única entidade usando a biblioteca LLVM-Based Pipeline Compiler (LLPC). O LLPC se baseia na infraestrutura de compilação de shader existente do LLVM para GPUs AMD para gerar objetos de código compatíveis com o pipeline ABI do PAL. Notavelmente, o driver Vulkan de código fechado da AMD atualmente usa um compilador de pipeline diferente, que é a principal diferença entre os drivers Vulkan de código aberto e de código fechado da AMD.
O driver de código aberto AMD para Vulkan foi projetado para suportar as seguintes GPUs AMD:
Nota Para GPUs pré-GFX10, use v-2023.Q3.3 ou versão anterior.
O driver de código aberto AMD para Vulkan foi projetado para suportar as seguintes distros e versões na pilha de drivers upstream AMDGPU e na pilha de drivers AMDGPU Pro:
O driver não foi bem testado em outras distros e versões. Você pode experimentá-lo em outras distros e versões de sua escolha.
Nota Para executar o driver Vulkan com pilha de driver upstream AMDGPU em GPUs de geração SI e CI, amdgpu.si_support e amdgpu.cik_support precisam estar habilitados no kernel
O driver de código aberto AMD para Vulkan foi projetado para oferecer suporte aos seguintes recursos:
Os seguintes recursos e melhorias estão planejados em versões futuras (consulte as Notas de Versão para atualização de cada versão):
uname -r
uname -r
ou sudo mkinitcpio --generate /boot/initrd .img- uname -r
uname -r
)Você está convidado a enviar contribuições de código para o driver de código aberto AMD para Vulkan.
O driver é construído a partir do código-fonte em cinco repositórios: LLVM, XGL, LLPC, GPURT e PAL.
Para alterações no LLVM, você deve enviar uma contribuição ao tronco LLVM. Os commits serão avaliados para serem mesclados no branch amd-gfx-gpuopen-master periodicamente.
Para alterações em XGL, LLPC, GPURT e PAL, crie uma solicitação pull no branch dev . Depois que sua alteração for revisada e se for aceita, ela será avaliada para ser incorporada à filial master em uma promoção regular subsequente.
IMPORTANTE : Ao criar uma solicitação pull, você concorda em permitir que sua contribuição seja licenciada pelos proprietários do projeto sob os termos da Licença MIT.
Ao contribuir com XGL, LLPC, GPURT e PAL, seu código deve:
Por favor, faça cada contribuição razoavelmente pequena. Se você gostaria de fazer uma grande contribuição, como um novo recurso ou extensão, levante uma questão primeiro para permitir que o planejamento avalie e revise seu trabalho.
Nota Como o PAL é um componente compartilhado que deve suportar outras APIs, outros sistemas operacionais e hardware de pré-produção, você pode ser solicitado a revisar sua alteração no PAL por motivos que podem não ser óbvios do ponto de vista puro do driver Linux Vulkan.
Recomenda-se instalar pelo menos 16 GB de RAM em seu sistema de compilação.
sudo apt-get install build-essential cmake curl g++-multilib gcc-multilib git ninja-build pkg-config python3 python3-jinja2 python3-ruamel.yaml
sudo apt-get install libssl-dev libx11-dev libxcb1-dev x11proto-dri2-dev libxcb-dri3-dev libxcb-dri2-0-dev libxcb-present-dev libxshmfence-dev libxrandr-dev libwayland-dev
dpkg --add-architecture i386
sudo apt-get install libssl-dev:i386 libx11-dev:i386 libxcb1-dev:i386 libxcb-dri3-dev:i386 libxcb-dri2-0-dev:i386 libxcb-present-dev:i386 libxshmfence-dev:i386 libwayland-dev libwayland-dev:i386 libxrandr-dev:i386
sudo yum -y install openssl-devel gcc-c++ python3 python3-pip curl glibc-devel libstdc++-devel libxcb-devel libX11-devel libxshmfence-devel libXrandr-devel wayland-devel
pip3 install jinja2 ruamel.yaml
sudo yum -y install openssl-devel.i686 gcc-c++ python3 python3-pip curl glibc-devel.i686 libstdc++-devel.i686 libxcb-devel.i686 libX11-devel.i686 libxshmfence-devel.i686 libXrandr-devel.i686 wayland-devel.i686
pip3 install jinja2 ruamel.yaml
Ferramentas de compilador de shader, como DirectXShaderCompiler e glslang, precisam ser instaladas para construir suporte ao raytracing.
Recomenda-se instalá-los a partir do VulkanSDK 1.3.290 ou superior.
Ubuntu 22.04 (Jammy)
wget -qO- https://packages.lunarg.com/lunarg-signing-key-pub.asc | sudo tee /etc/apt/trusted.gpg.d/lunarg.asc
sudo wget -qO /etc/apt/sources.list.d/lunarg-vulkan-1.3.290-jammy.list https://packages.lunarg.com/vulkan/1.3.290/lunarg-vulkan-1.3.290-jammy.list
sudo apt update
sudo apt install vulkan-sdk
Obtenha o código-fonte DirectXShaderCompiler e glslang e crie ferramentas localmente.
#!/bin/bash
if [ ! -d DirectXShaderCompiler ]; then
git clone --depth=1 -b release-1.8.2403 https://github.com/microsoft/DirectXShaderCompiler.git
fi
if [ ! -d glslang ]; then
git clone --depth=1 -b vulkan-sdk-1.3.290.0 https://github.com/KhronosGroup/glslang.git
fi
cd DirectXShaderCompiler
git submodule init
git submodule update
cmake -H. -Bbuilds -GNinja -DCMAKE_BUILD_TYPE=Release -C ./cmake/caches/PredefinedParams.cmake
cmake --build builds
cd ..
cd glslang
cmake -H. -Bbuilds -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX='builds/install'
cd builds
make -j8 install
cd ../../
Defina env PATH e LD_LIBRARY_PATH antes da construção do driver amdvlk.
export PATH=/builds/bin:/install/bin:$PATH
export LD_LIBRARY_PATH=/builds/lib:$LD_LIBRARY_PATH
mkdir ~/bin
curl https://storage.googleapis.com/git-repo-downloads/repo > ~/bin/repo
chmod a+x ~/bin/repo
export PATH=~/bin:"$PATH"
mkdir vulkandriver
cd vulkandriver
repo init -u https://github.com/GPUOpen-Drivers/AMDVLK.git -b master
repo sync
Nota O código-fonte na ramificação dev pode ser obtido usando "-b dev" no comando "repo init".
cmake -G Ninja -S xgl -B builds/Release64
cmake --build builds/Release64
cmake -G Ninja -S xgl -B builds/Release32 -DCMAKE_C_FLAGS=-m32 -DCMAKE_CXX_FLAGS=-m32
cmake --build builds/Release32
Observação
- Para compilação de depuração, use
-DCMAKE_BUILD_TYPE=Debug -DLLVM_PARALLEL_LINK_JOBS=2
(vincular uma compilação de depuração do llvm consome muita memória, portanto, usamos apenas dois trabalhos paralelos).- Se você deseja construir ferramentas (como amdllpc) junto com o driver, adicione
-m build_with_tools.xml
no repo init e adicione a opção de construção-DXGL_BUILD_TOOLS=ON
.
Você pode baixar e instalar o pacote SDK aqui.
sudo apt install libssl3
sudo yum install openssl-libs
sudo cmake --install builds/Release64 --component icd
sudo cmake --install builds/Release32 --component icd
Se desejar instalar o driver no diretório personalizado, você pode adicionar "-DCMAKE_INSTALL_PREFIX={diretório de instalação}" no comando cmake build. Os arquivos JSON serão instalados em /etc/vulkan/icd.d enquanto outros arquivos serão instalados no diretório de instalação que você especificou.
Se o RADV também estiver instalado no sistema, o driver AMDVLK será habilitado por padrão após a instalação. Você pode alternar o driver entre AMDVLK e RADV pela variável de ambiente AMD_VULKAN_ICD = AMDVLK ou RADV.
Nota: As etapas restantes são necessárias apenas ao executar a pilha de drivers upstream AMDGPU.
Adicione as seguintes linhas em /usr/share/X11/xorg.conf.d/10-amdgpu.conf:
Section "Device"
Identifier "AMDgpu"
Option "DRI" "3"
EndSection
E certifique-se de que a seguinte linha NÃO esteja incluída na seção:
Driver "modesetting"
Na pilha de driver upstream AMDGPU com versão libdrm inferior a 2.4.92, o número máximo de IB por envio DEVE ser limitado a 4 (a configuração padrão no driver AMD Open Source para Vulkan é 16). Isso pode ser feito por meio do mecanismo Runtime Settings adicionando a seguinte linha ao amdPalSettings.cfg:
MaxNumCmdStreamsPerSubmit,4
CommandBufferCombineDePreambles,1
Você pode gerar o pacote de instalação com o comando abaixo ao construir o driver:
cmake -G Ninja -S xgl -B builds/Release64 [-DPACKAGE_VERSION=package version]
cmake --build builds/Release64 --target makePackage
cmake -G Ninja -S xgl -B builds/Release64 [-DPACKAGE_VERSION=package version]
cmake --build builds/Release64 --target makePackage
Você também pode baixar o pacote pré-construído em https://github.com/GPUOpen-Drivers/AMDVLK/releases para cada promoção de código no branch master.
Abaixo está a instrução de instalação:
sudo dpkg -r amdvlk # If old version is installed on the machine, remove it first
sudo dpkg -i amdvlk_x.x.x_amd64.deb
sudo apt-get -f install
sudo rpm -e amdvlk # If old version is installed on the machine, remove it first
sudo rpm -i amdvlk-x.x.x.x86_64.rpm
Para Ubuntu, você também pode instalar o driver mais recente em https://repo.radeon.com:
sudo wget -qO - http://repo.radeon.com/amdvlk/apt/debian/amdvlk.gpg.key | sudo apt-key add -
sudo sh -c 'echo deb [arch=amd64,i386] http://repo.radeon.com/amdvlk/apt/debian/ bionic main > /etc/apt/sources.list.d/amdvlk.list'
sudo apt-get remove amdvlk # If old version is installed on the machine, remove it first
sudo apt update
sudo apt-get install amdvlk
O driver expõe muitas configurações que podem personalizar o comportamento do driver e facilitar a depuração. Você pode adicionar/editar configurações no arquivo amdVulkanSettings.cfg ou amdPalSettings.cfg em um dos caminhos abaixo, formatado com um par name,value
por linha:
Alguns exemplos de configurações estão listados abaixo:
Nome da configuração | Valores válidos | Comentário |
---|---|---|
AllowVkPipelineCachingToDisk | 0: proibir 1: padrão | 1 é o valor padrão que ativa o cache baseado em arquivos compactados do Pal. O arquivo compactado é armazenado em ~/.cache/AMD/VkCache. |
ShaderCacheMode | 0: desativar cache 1: cache de tempo de execução 2: cache no disco | O cache de tempo de execução é o modo padrão. Para "cache no disco", o arquivo de cache é gerado em $AMD_SHADER_DISK_CACHE_PATH/AMD/LlpcCache ou $XDG_CACHE_HOME/AMD/LlpcCache ou $HOME/.cache/AMD/LlpcCache |
IFH | 0: padrão 1: descarte todos os envios | Hardware infinitamente rápido. As chamadas de envio são descartadas antes de serem enviadas ao hardware. Útil para medir o desempenho limitado pela CPU. |
EnableVmAlwaysValid | 0: desativar 1: padrão 2: forçar habilitação | 1 é a configuração padrão que ativa o recurso VM sempre válido para kernel 4.16 e superior. O recurso pode reduzir a sobrecarga de envio do buffer de comando relacionada ao gerenciamento de memória virtual. |
IdleAfterSubmitGpuMask | Bitmask de GPUs (ou seja, bit 0 é GPU0, etc.) | Força a CPU a aguardar imediatamente a conclusão de cada envio de GPU no conjunto especificado de GPUs. |
Todas as configurações disponíveis podem ser determinadas examinando os arquivos de origem abaixo que as definem.
As configurações de tempo de execução são lidas somente na inicialização do dispositivo e não podem ser alteradas sem reiniciar o aplicativo. Se estiver executando em um sistema com várias GPUs, as mesmas configurações serão aplicadas a todas elas. Linhas no arquivo de configurações que começam com ;
serão tratados como comentários.
As extensões em desenvolvimento não estão habilitadas por padrão no driver. Você pode habilitá-los através da variável de ambiente:
export AMDVLK_ENABLE_DEVELOPING_EXT=" [...]"
ou
export AMDVLK_ENABLE_DEVELOPING_EXT="all"
O nome da extensão não diferencia maiúsculas de minúsculas.
O GpuProfiler é uma camada opcional projetada para interceptar a interface PAL para fornecer suporte básico de perfil de GPU. Atualmente, esta camada é controlada exclusivamente através de configurações de tempo de execução e envia seus resultados para arquivo.
Você pode usar as seguintes configurações de tempo de execução para gerar arquivos .csv com tempos de GPU de trabalho executado durante os quadros designados de um aplicativo (um arquivo para cada quadro):
Nome da configuração | Valor | Comentário |
---|---|---|
GpuProfilerMode | 0: desativar 1: habilite com sqtt desligado 2: habilite com sqtt para rastreamento de thread 3: habilite com sqtt para RGP | Habilita e define o modo SQTT para a camada do criador de perfil de desempenho da GPU. A captura real dos dados de desempenho deve ser especificada por meio do número do quadro com GpuProfilerConfig_StartFrame ou pressionando shift-F11. |
GpuProfilerConfig.LogDirectory | | O caminho do diretório é relativo a $AMD_DEBUG_DIR ou $TMPDIR ou /var/tmp/, o valor padrão é "amdpal/". Seu aplicativo deve ter permissões de gravação no diretório. Os logs de criação de perfil são gerados em um subdiretório nomeado no formato como |
GpuProfilerConfig.Granularity | 0: por sorteio 1: por cmdbuf | Define o que é medido/perfilado. Por sorteio cronometra comandos individuais (como sorteio, expedição, etc.) dentro de buffers de comando, enquanto per-cmdbuf apenas cria perfis de buffers de comando inteiros de forma agregada. |
GpuProfilerConfig.StartFrame | Inteiro positivo | Primeiro quadro para capturar dados. Se StartFrame e FrameCount não estiverem definidos, todos os quadros terão perfil criado. |
GpuProfilerConfig.FrameCount | Inteiro positivo | Número de quadros para capturar dados. |
GpuProfilerConfig.RecordPipelineStats | 0, 1 | Reúne dados de consulta estatística de pipeline por entrada, se habilitado. |
Você pode usar o script timingReport.py para analisar o log de criação de perfil:
python timingReport.py
A saída de timeReport.py inclui as informações dos principais pipelines, como abaixo:
Top Pipelines (>= 1%)
Compiler Hash | Type | Avg. Call Count | Avg. GPU Time [us] | Avg. Frame %
1. 0xd91d15e42d62dcbb | VsPs | 43 | 11,203.15 | 10.20 %
2. 0x724e9af55f2adf1b | Cs | 1 | 9,347.50 | 8.51 %
3. 0x396e5ad6f7a789f7 | VsHsDsPs | 468 | 8,401.35 | 7.65 %
Você pode adicionar as seguintes configurações a amdPalSettings.cfg para despejar as informações de cada pipeline:
EnablePipelineDump,1
PipelineDumpDir,
PipelineDumpDir é um subcaminho relativo a $AMD_DEBUG_DIR ou $TMPDIR ou /var/tmp/, o valor padrão é "spvPipeline/". O arquivo de despejo do pipeline é nomeado no formato Pipeline
A sobreposição de depuração do PAL pode ser habilitada para exibir estatísticas e informações em tempo real sobre um aplicativo em execução. Isso inclui uma média contínua de FPS, tempos de quadro de CPU e GPU e um registro que rastreia quanta memória de vídeo foi alocada de cada heap disponível. O benchmarking (ou seja, "Benchmark (F11)") não é suportado atualmente.
Nome da configuração | Valor | Comentário |
---|---|---|
DebugOverlayEnabled | 0, 1 | Ativa a sobreposição de depuração. |
DebugOverlayConfig.DebugOverlayLocation | 0: canto superior esquerdo 1: canto superior direito 2: canto inferior esquerdo 3: canto inferior direito | Determina onde o texto sobreposto deve ser exibido. Pode ser usado para evitar colisão com renderizações importantes do aplicativo. |
DebugOverlayConfig.PrintFrameNumber | 0, 1 | Informa o número do quadro atual. Útil ao determinar um bom intervalo de quadros para criação de perfil com a camada GpuProfiler. |
DebugOverlayConfig.TimeGraphEnable | 0, 1 | Permite a renderização de um gráfico de tempos de quadro recentes de CPU e GPU. |
O driver de código aberto AMD para Vulkan contém código escrito por terceiros.
As informações aqui contidas são apenas para fins informativos e estão sujeitas a alterações sem aviso prévio. Este documento pode conter imprecisões técnicas, omissões e erros tipográficos, e a AMD não tem obrigação de atualizar ou de outra forma corrigir essas informações. não faz representações ou garantias com relação à exatidão ou integridade do conteúdo deste documento e não assume nenhuma responsabilidade de qualquer tipo, incluindo garantias implícitas de não violação, comercialização ou adequação a fins específicos, com relação a a operação ou uso de hardware, software ou outros produtos AMD aqui descritos. Nenhuma licença, inclusive implícita ou resultante de preclusão, para quaisquer direitos de propriedade intelectual é concedida por este documento. Os termos e limitações aplicáveis à compra ou uso de produtos da AMD são estabelecidos em um contrato assinado entre as partes ou nos Termos e Condições de Venda Padrão da AMD.
AMD, o logotipo AMD Arrow, Radeon, FirePro e suas combinações são marcas registradas da Advanced Micro Devices, Inc. Outros nomes de produtos usados nesta publicação são apenas para fins de identificação e podem ser marcas registradas de suas respectivas empresas.
Vega é um codinome da arquitetura AMD e não um nome de produto.
Linux é marca registrada de Linus Torvalds nos EUA e em outros países.
Vulkan e o logotipo Vulkan são marcas registradas do Khronos Group, Inc.