Vulkan (Español)
Desde Wikipedia (Ingles):
- Vulkan es una API de computación y gráficos 3D multiplataforma de baja sobrecarga. Lanzada por primera vez en 2016, es la sucesora de OpenGL (Español).
Más información en la pagina web de Khronos.
Instalación
Para ejecutar una aplicación Vulkan, necesitarás instalar el paquete vulkan-icd-loader (y lib32-vulkan-icd-loader si también quieres ejecutar aplicaciones de 32 bits), así como controladores Vulkan para tu(s) tarjeta(s) gráfica(s). Hay varios paquetes que proporcionan un vulkan-driver:
- Intel: vulkan-intel (o lib32-vulkan-intel)
- NVIDIA: nvidia-utils (o lib32-nvidia-utils)
-
AMD: hay tres implementaciones, que podrían instalarse simultáneamente:
- vulkan-radeon (o lib32-vulkan-radeon) - RADV (parte del proyecto Mesa)
- amdvlk (o lib32-amdvlk) - AMDVLK Abierto (mantenido por AMD)
- vulkan-amdgpu-proAUR (o lib32-vulkan-amdgpu-proAUR) - AMDVLK Cerrado (mantenido por AMD)
Los siguientes son rasterizadores de software, para que pueda utilizarlo en dispositivos que no proporcionan soporte Vulkan.
- Lavapipe: vulkan-swrast (o lib32-vulkan-swrast)
- SwiftShader: swiftshader-gitAUR
Para el desarrollo de aplicaciones Vulkan, instale vulkan-headers, y opcionalmente vulkan-validation-layers, vulkan-man-pagesAUR y vulkan-tools (puedes encontrar la herramienta vulkaninfo
aquí).
Verificación
Para ver qué implementaciones de Vulkan están instaladas actualmente en tu sistema, utiliza el siguiente comando:
$ ls /usr/share/vulkan/icd.d/
Para asegurarte de que Vulkan funciona con tu hardware, instale vulkan-tools y use el comando vulkaninfo
para obtener información relevante sobre su sistema. Si obtienes información sobre tu tarjeta gráfica, sabrás que Vulkan está funcionando.
$ vulkaninfo
Alternación
Alternar entre dispositivos
En sistemas con múltiples GPUs puede que necesites forzar el uso de una GPU específica. vkdevicechooserAUR proporciona una forma sencilla de hacerlo. Se instalará en el directorio de capas Vulkan del sistema, /usr/share/vulkan/implicit_layer.d/
.
Para ejecutar una aplicación Vulkan forzando el uso de un dispositivo específico, lánzala con estas variables de entorno:
$ ENABLE_DEVICE_CHOOSER_LAYER=1 VULKAN_DEVICE_INDEX=device_index
Sustituye device_index
por el GPU id
del dispositivo deseado según vulkaninfo
(sin el layer activado).
Alternar entre controladores AMD
En los sistemas AMD, es válido tener varios controladores Vulkan instalados a la vez, y puede ser conveniente cambiar entre ellos.
Selección mediante variable de entorno
A partir de amdvlk 2021.Q3.4, se ha implementado una nueva lógica de intercambio que establece AMDVLK como valor predeterminado y exige que o bien
- establezca
AMD_VULKAN_ICD=RADV
para cambiar del valor por defecto AMDVLK, - o configure globalmente
DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1
para volver a activar el método de carga ICD que se indica a continuación.
Cuando DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1
, puede elegir su controlador preferido configurando la variable de entorno. VK_DRIVER_FILES
. Por ejemplo, para ejecutar Steam con el controlador RADV se hace lo siguiente
$ VK_DRIVER_FILES=/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json steam
Para evitar fallos con juegos de 32 bits, es posible asignar la variante de 32 bits y la variante de 64 bits a la variable de entorno.
Selección mediante prefijos AMD Vulkan
AMD Vulkan Prefixes es un script para cambiar entre las tres implementaciones de Vulkan. Instale amd-vulkan-prefixesAUR, y antepone tu aplicación con el prefijo que quieras. Los ejecutables proporcionados son vk_radv
, vk_amdvlk
, y vk_pro
. Por ejemplo, para utilizar los controladores cerrados AMDVLK:
$ vk_pro command
Rendimiento del software
Puedes instalar el rasterizador Vulkan por software conocido como lavapipe, por ejemplo para depurar problemas de hardware: vulkan-swrast (o lib32-vulkan-swrast para la versión de 32 bits).
El siguiente ejemplo muestra la ejecución de vulkaninfo con las variables de entorno necesarias para forzar un renderizado por software completo para Vulkan y OpenGL (con __GLX_VENDOR_LIBRARY_NAME=mesa
asegurando que el comando también funciona para usuarios que utilizan PRIME):
$ LIBGL_ALWAYS_SOFTWARE=1 __GLX_VENDOR_LIBRARY_NAME=mesa VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.i686.json:/usr/share/vulkan/icd.d/lvp_icd.x86_64.json vulkaninfo
Base de datos de hardware Vulkan
La "Vulkan Hardware Database" proporciona combinaciones GPU/driver reportadas por los usuarios. Es posible proporcionar información propia utilizando vulkan-caps-viewer-waylandAUR o vulkan-caps-viewer-x11AUR.
Solución de Problemas
NVIDIA - vulkan is not working and can not initialize
Check if you have any other vulkan driver installed, it may prevent NVIDIA's vulkan driver from being detected.
Alternatively set the environment variable VK_DRIVER_FILES
to /usr/share/vulkan/icd.d/nvidia_icd.json
.
If you have a dual-graphics system, like NVIDIA Optimus, ensure that your system is using the graphics card that you installed Vulkan drivers for.
optimus-manager --status
Optimus Manager (Client) version 1.4 Current GPU mode : nvidia GPU mode requested for next login : no change GPU at startup : integrated Temporary config path: no
No device for the display GPU found. Are the intel-mesa drivers installed?
Try to list both the intel_icd and primus_vk_wrapper configurations in VK_DRIVER_FILES
export VK_DRIVER_FILES=/usr/share/vulkan/icd.d/intel_icd.x86_64.json:/usr/share/vulkan/icd.d/nv_vulkan_wrapper.json
AMDGPU - ERROR_INITIALIZATION_FAILED after vulkaninfo
If after running vulkaninfo
on AMD card from GCN1 or GCN2 family you got error message like:
ERROR at /build/vulkan-tools/src/Vulkan-Tools-1.2.135/vulkaninfo/vulkaninfo.h:240:vkEnumerateInstanceExtensionProperties failed with ERROR_INITIALIZATION_FAILED
Then check if you have correctly enable support for this models of graphics cards (AMDGPU#Enable Southern Islands (SI) and Sea Islands (CIK) support).
One of possibility to check if gpu drivers are correctly loaded is lspci -k
, after running this command check kernel driver of your gpu. It should be amdgpu
.
$ lspci -k
... 01:00.0 VGA compatible controller: Advanced Micro Devices, Inc. [AMD/ATI] Curacao PRO [Radeon R7 370 / R9 270/370 OEM] Subsystem: Gigabyte Technology Co., Ltd Device 226c Kernel driver in use: amdgpu Kernel modules: radeon, amdgpu ...
Some forum threads about this problem: [3] [4]
AMDGPU - Hangs when playing DirectX Vulkan games
Radeon-Vulkan seems to cause driver and/or GPU hangs when playing some games with usage of DirectX Vulkan.
kernel: [drm:amdgpu_dm_atomic_commit_tail [amdgpu]] *ERROR* Waiting for fences timed out! kernel: [drm:amdgpu_job_timedout [amdgpu]] *ERROR* ring gfx_0.0.0 timeout, signaled ..., emitted ... kernel: [drm:amdgpu_job_timedout [amdgpu]] *ERROR* Process information: process ... pid ... thread dxvk-submit pid ...
Switching to or enabling AMDVLK seems to fix the problem as discovered in BBS#275991.
AMDGPU - Crashes with DirectX Vulkan games
AMDVLK has been reported as causing crashes by multiple users (see BBS#284118, BBS#283008, BBS#274737): switching to or enabling the Radeon-Vulkan driver fixes the issue.
AMDGPU - Vulkan applications launch slowly
If you install cuda, you might find Vulkan applications, for example, Chromium, launch slowly. It's because nvidia-utils provides an Vulkan driver and Vulkan would try nvidia drivers before radeon drivers. To solve it, set the environment variable VK_DRIVER_FILES
to /usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json
.
AMDGPU - Found no drivers!
When encountering Found no drivers!
:
$ vulkaninfo
WARNING: [Loader Message] Code 0 : terminator_CreateInstance: Failed to CreateInstance in ICD 0. Skipping ICD. ERROR: [Loader Message] Code 0 : terminator_CreateInstance: Found no drivers! Cannot create Vulkan instance. This problem is often caused by a faulty installation of the Vulkan driver or attempting to use a GPU that does not support Vulkan. ERROR at /usr/src/debug/vulkan-tools/Vulkan-Tools-1.3.269/vulkaninfo/./vulkaninfo.h:688:vkCreateInstance failed with ERROR_INCOMPATIBLE_DRIVER
AMD has regularly dropped support for pre-Polaris and up to Vega. If your GPU support was removed from amdvlk, uninstall it and install vulkan-radeon.