El controlador AMD Open Source para Vulkan® es un controlador Vulkan de código abierto para adaptadores gráficos Radeon™ en Linux®. Está construido sobre la Biblioteca de abstracción de plataforma (PAL) de AMD, un componente compartido que está diseñado para encapsular ciertos detalles de programación específicos del hardware y del sistema operativo para muchos de los controladores informáticos y 3D de AMD. Aprovechar PAL puede ayudar a brindar una experiencia consistente en todas las plataformas, incluida la compatibilidad con GPU lanzadas recientemente y la compatibilidad con las herramientas de desarrollo de AMD.
Los sombreadores que componen un objeto VkPipeline
particular se compilan como una sola entidad utilizando la biblioteca LLVM-Based Pipeline Compiler (LLPC). LLPC se basa en la infraestructura de compilación de sombreadores existente de LLVM para las GPU AMD para generar objetos de código compatibles con la ABI de canalización de PAL. En particular, el controlador Vulkan de código cerrado de AMD actualmente utiliza un compilador de canalización diferente, que es la principal diferencia entre los controladores Vulkan de código abierto y de código cerrado de AMD.
El controlador AMD Open Source para Vulkan está diseñado para admitir las siguientes GPU AMD:
Nota Para GPU anteriores a GFX10, utilice v-2023.Q3.3 o una versión anterior.
El controlador AMD Open Source para Vulkan está diseñado para admitir las siguientes distribuciones y versiones tanto en la pila de controladores ascendentes AMDGPU como en la pila de controladores AMDGPU Pro:
El controlador no ha sido bien probado en otras distribuciones y versiones. Puede probarlo en otras distribuciones y versiones de su elección.
Nota Para ejecutar el controlador Vulkan con la pila de controladores ascendentes AMDGPU en GPU de generación SI y CI, amdgpu.si_support y amdgpu.cik_support deben estar habilitados en el kernel
El controlador AMD Open Source para Vulkan está diseñado para admitir las siguientes funciones:
Las siguientes características y mejoras están planificadas en versiones futuras (consulte las Notas de la versión para conocer la actualización de cada versión):
uname -r
uname -r
o sudo mkinitcpio --generate /boot/initrd .img- uname -r
uname -r
)Le invitamos a enviar contribuciones de código al controlador de código abierto AMD para Vulkan.
El controlador se construye a partir del código fuente en cinco repositorios: LLVM, XGL, LLPC, GPURT y PAL.
Para cambios en LLVM, debe enviar una contribución al troncal de LLVM. Las confirmaciones allí se evaluarán periódicamente para fusionarse en la rama amd-gfx-gpuopen-master.
Para cambios en XGL, LLPC, GPURT y PAL, cree una solicitud de extracción en la rama de desarrollo . Luego de que se revise su cambio y si es aceptado, se evaluará para fusionarse con la rama maestra en una promoción regular posterior.
IMPORTANTE : al crear una solicitud de extracción, acepta permitir que los propietarios del proyecto obtengan la licencia de su contribución según los términos de la licencia MIT.
Al contribuir a XGL, LLPC, GPURT y PAL, su código debe:
Por favor, haga que cada contribución sea razonablemente pequeña. Si desea hacer una gran contribución, como una nueva función o extensión, plantee un problema primero para permitir que la planificación evalúe y revise su trabajo.
Nota Dado que PAL es un componente compartido que debe admitir otras API, otros sistemas operativos y hardware de preproducción, es posible que se le solicite que revise su cambio de PAL por razones que pueden no ser obvias desde la perspectiva pura del controlador Vulkan de Linux.
Se recomienda instalar al menos 16 GB de RAM en su sistema de compilación.
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
Es necesario instalar herramientas de compilación de sombreadores, como DirectXShaderCompiler y glslang, para crear compatibilidad con el trazado de rayos.
Se recomienda instalarlos desde VulkanSDK 1.3.290 o 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
Obtenga el código fuente de DirectXShaderCompiler y glslang y cree herramientas en local.
#!/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 ../../
Configure env PATH y LD_LIBRARY_PATH antes de compilar el controlador 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 El código fuente en la rama dev se puede obtener usando "-b dev" en el 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
Nota
- Para la compilación de depuración, use
-DCMAKE_BUILD_TYPE=Debug -DLLVM_PARALLEL_LINK_JOBS=2
(Vincular una compilación de depuración de llvm consume mucha memoria, por lo que solo usamos dos trabajos paralelos).- Si desea crear herramientas (como amdllpc) junto con el controlador, agregue
-m build_with_tools.xml
en el inicio del repositorio y agregue la opción de compilación-DXGL_BUILD_TOOLS=ON
.
Puede descargar e instalar el paquete SDK aquí.
sudo apt install libssl3
sudo yum install openssl-libs
sudo cmake --install builds/Release64 --component icd
sudo cmake --install builds/Release32 --component icd
Si desea instalar el controlador en un directorio personalizado, puede agregar "-DCMAKE_INSTALL_PREFIX={directorio de instalación}" en el comando de compilación cmake. Los archivos JSON se instalarán en /etc/vulkan/icd.d mientras que otros archivos se instalarán en el directorio de instalación que especificó.
Si RADV también está instalado en el sistema, el controlador AMDVLK se habilitará de forma predeterminada después de la instalación. Puede cambiar el controlador entre AMDVLK y RADV mediante la variable de entorno AMD_VULKAN_ICD = AMDVLK o RADV.
Nota: Los pasos restantes solo son necesarios cuando se ejecuta la pila de controladores ascendentes AMDGPU.
Agregue las siguientes líneas en /usr/share/X11/xorg.conf.d/10-amdgpu.conf:
Section "Device"
Identifier "AMDgpu"
Option "DRI" "3"
EndSection
Y asegúrese de que la siguiente línea NO esté incluida en la sección:
Driver "modesetting"
En la pila de controladores ascendentes de AMDGPU con una versión de libdrm inferior a 2.4.92, el número máximo de IB por envío DEBE limitarse a 4 (la configuración predeterminada en el controlador AMD Open Source para Vulkan es 16). Esto se puede lograr a través del mecanismo de configuración de tiempo de ejecución agregando la siguiente línea a amdPalSettings.cfg:
MaxNumCmdStreamsPerSubmit,4
CommandBufferCombineDePreambles,1
Puede generar el paquete de instalación con el siguiente comando mientras crea el controlador:
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
También puede descargar el paquete prediseñado desde https://github.com/GPUOpen-Drivers/AMDVLK/releases para cada promoción de código en la rama maestra.
A continuación se muestran las instrucciones de instalación:
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, también puede instalar la última versión del controlador desde 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
El controlador expone muchas configuraciones que pueden personalizar el comportamiento del controlador y facilitar la depuración. Puede agregar/editar configuraciones en el archivo amdVulkanSettings.cfg o amdPalSettings.cfg en una de las siguientes rutas, formateadas con un par name,value
por línea:
A continuación se enumeran algunos ejemplos de configuraciones:
Nombre de configuración | Valores válidos | Comentario |
---|---|---|
AllowVkPipelineCachingToDisk | 0: no permitir 1: predeterminado | 1 es el valor predeterminado que habilita el almacenamiento en caché basado en archivos comprimidos de Pal. El archivo comprimido se almacena en ~/.cache/AMD/VkCache. |
ShaderCacheMode | 0: deshabilitar caché 1: caché en tiempo de ejecución 2: caché al disco | La caché en tiempo de ejecución es el modo predeterminado. Para "caché en disco", el archivo de caché se genera en $AMD_SHADER_DISK_CACHE_PATH/AMD/LlpcCache o $XDG_CACHE_HOME/AMD/LlpcCache o $HOME/.cache/AMD/LlpcCache |
IFH | 0: predeterminado 1: descartar todos los envíos | Hardware infinitamente rápido. Las llamadas de envío se descartan antes de enviarse al hardware. Útil para medir el rendimiento limitado de la CPU. |
EnableVmAlwaysValid | 0: desactivar 1: predeterminado 2: forzar habilitación | 1 es la configuración predeterminada que habilita la función VM siempre válida para el kernel 4.16 y superior. La función puede reducir la sobrecarga de envío del búfer de comandos relacionada con la gestión de la memoria virtual. |
IdleAfterSubmitGpuMask | Máscara de bits de GPU (es decir, el bit 0 es GPU0, etc.) | Obliga a la CPU a esperar inmediatamente a que se complete cada envío de GPU en el conjunto de GPU especificado. |
Todas las configuraciones disponibles se pueden determinar examinando los siguientes archivos fuente que las definen.
La configuración del tiempo de ejecución solo se lee durante la inicialización del dispositivo y no se puede cambiar sin reiniciar la aplicación. Si se ejecuta en un sistema con varias GPU, se aplicará la misma configuración a todas ellas. Líneas en el archivo de configuración que comienzan con ;
serán tratados como comentarios.
Las extensiones en desarrollo no están habilitadas de forma predeterminada en el controlador. Puede habilitarlos a través de la variable de entorno:
export AMDVLK_ENABLE_DEVELOPING_EXT=" [...]"
o
export AMDVLK_ENABLE_DEVELOPING_EXT="all"
El nombre de la extensión no distingue entre mayúsculas y minúsculas.
GpuProfiler es una capa opcional diseñada para interceptar la interfaz PAL para proporcionar soporte básico de creación de perfiles de GPU. Actualmente, esta capa se controla exclusivamente a través de la configuración del tiempo de ejecución y envía sus resultados a un archivo.
Puede utilizar las siguientes configuraciones de tiempo de ejecución para generar archivos .csv con tiempos de trabajo de GPU realizados durante los fotogramas designados de una aplicación (un archivo para cada fotograma):
Nombre de configuración | Valor | Comentario |
---|---|---|
GpuProfilerMode | 0: desactivar 1: habilitar con sqtt desactivado 2: habilitar con sqtt para seguimiento de subprocesos 3: habilitar con sqtt para RGP | Habilita y configura el modo SQTT para la capa del perfilador de rendimiento de GPU. La captura real de los datos de rendimiento se debe especificar mediante el número de fotograma con GpuProfilerConfig_StartFrame o presionando shift-F11. |
GpuProfilerConfig.LogDirectory | | La ruta del directorio es relativa a $AMD_DEBUG_DIR o $TMPDIR o /var/tmp/, el valor predeterminado es "amdpal/". Su aplicación debe tener permisos de escritura en el directorio. Los registros de generación de perfiles se envían a un subdirectorio cuyo nombre tiene un formato como |
GpuProfilerConfig.Granularity | 0: por sorteo 1: por cmdbuf | Define lo que se mide/perfila. Por extracción multiplica los comandos individuales (como dibujar, enviar, etc.) dentro de los búferes de comandos, mientras que per-cmdbuf solo perfila los búferes de comandos completos en conjunto. |
GpuProfilerConfig.StartFrame | Entero positivo | Primer fotograma para capturar datos. Si StartFrame y FrameCount no están configurados, se perfilarán todos los fotogramas. |
GpuProfilerConfig.FrameCount | Entero positivo | Número de fotogramas para los que capturar datos. |
GpuProfilerConfig.RecordPipelineStats | 0, 1 | Recopila datos de consultas de estadísticas de canalización por entrada si está habilitado. |
Puede utilizar el script timingReport.py para analizar el registro de perfiles:
python timingReport.py
El resultado de timeReport.py incluye la información de las principales canalizaciones, como se muestra a continuación:
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 %
Puede agregar las siguientes configuraciones a amdPalSettings.cfg para volcar la información de cada canalización:
EnablePipelineDump,1
PipelineDumpDir,
PipelineDumpDir es una subruta relativa a $AMD_DEBUG_DIR o $TMPDIR o /var/tmp/, el valor predeterminado es "spvPipeline/". El archivo de volcado de canalización tiene un nombre en formato Pipeline
La superposición de depuración de PAL se puede habilitar para mostrar estadísticas e información en tiempo real sobre una aplicación en ejecución. Esto incluye un promedio móvil de FPS, tiempos de fotogramas de CPU y GPU, y un libro de contabilidad que rastrea cuánta memoria de video se ha asignado de cada montón disponible. Actualmente no se admiten evaluaciones comparativas (es decir, "Benchmark (F11)").
Nombre de configuración | Valor | Comentario |
---|---|---|
DebugOverlayEnabled | 0, 1 | Habilita la superposición de depuración. |
DebugOverlayConfig.DebugOverlayLocation | 0: arriba a la izquierda 1: arriba a la derecha 2: abajo a la izquierda 3: abajo a la derecha | Determina dónde se debe mostrar el texto superpuesto. Se puede utilizar para evitar colisiones con renderizaciones importantes de la aplicación. |
DebugOverlayConfig.PrintFrameNumber | 0, 1 | Informa el número de fotograma actual. Útil para determinar un buen rango de fotogramas para crear perfiles con la capa GpuProfiler. |
DebugOverlayConfig.TimeGraphEnable | 0, 1 | Habilita la representación de un gráfico de tiempos de fotogramas recientes de CPU y GPU. |
El controlador AMD Open Source para Vulkan contiene código escrito por terceros.
La información contenida en este documento tiene únicamente fines informativos y está sujeta a cambios sin previo aviso. Este documento puede contener imprecisiones técnicas, omisiones y errores tipográficos, y AMD no tiene ninguna obligación de actualizar o corregir esta información. Advanced Micro Devices, Inc. no hace declaraciones ni ofrece garantías con respecto a la exactitud o integridad del contenido de este documento, y no asume ninguna responsabilidad de ningún tipo, incluidas las garantías implícitas de no infracción, comerciabilidad o idoneidad para fines particulares, con respecto a el funcionamiento o uso del hardware, software u otros productos de AMD descritos en este documento. Este documento no otorga ninguna licencia, ni siquiera implícita o que surja por impedimento legal, sobre ningún derecho de propiedad intelectual. Los términos y limitaciones aplicables a la compra o uso de los productos de AMD se establecen en un acuerdo firmado entre las partes o en los Términos y condiciones de venta estándar de AMD.
AMD, el logotipo de AMD Arrow, Radeon, FirePro y sus combinaciones son marcas comerciales de Advanced Micro Devices, Inc. Otros nombres de productos utilizados en esta publicación son solo para fines de identificación y pueden ser marcas comerciales de sus respectivas compañías.
Vega es un nombre en clave para la arquitectura AMD y no es un nombre de producto.
Linux es la marca registrada de Linus Torvalds en EE. UU. y otros países.
Vulkan y el logotipo de Vulkan son marcas comerciales registradas de Khronos Group, Inc.