Vulkan
- Vulkan是一种低开销、跨平台的3D图形和计算API。它于2016年首次发布,是 OpenGL 的继任者。
在 Khronos 了解更多信息。
安装[编辑 | 编辑源代码]
要运行 Vulkan 程序,你需要安装 vulkan-icd-loader包 软件包(如果想运行32位程序,还需要安装 lib32-vulkan-icd-loader包)以及显卡的驱动程序。有几个软件包可以 提供 vulkan 驱动程序:
- Intel: vulkan-intel包 (或 lib32-vulkan-intel包)
- NVIDIA: nvidia-utils包 (或 lib32-nvidia-utils包)
- AMD: 有三种实现,可以同时安装:
- vulkan-radeon包 (或 lib32-vulkan-radeon包) - RADV (Mesa 项目的一部分)
- amdvlk包 (或 lib32-amdvlk包) - AMDVLK 开源版(由 AMD 维护)
- vulkan-amdgpu-proAUR (或 lib32-vulkan-amdgpu-proAUR) - AMDVLK 闭源版(由 AMD维护)
作为代替,可以手动安装其他驱动程序:
- PowerVR: https://developer.imaginationtech.com/vulkan
- Adreno: https://developer.qualcomm.com/software/adreno-gpu-sdk/gpu
对于 Vulkan 程序开发,安装 vulkan-headers包,以及可选的 vulkan-validation-layers包 与 vulkan-tools包 (你可以在这里找到 vulkaninfo 工具)。
验证[编辑 | 编辑源代码]
要查看系统上当前安装了哪些 Vulkan 实现,请使用以下命令:
$ ls /usr/share/vulkan/icd.d/
为确保 Vulkan 在你的硬件上工作, 安装 vulkan-tools包 并使用 vulkaninfo
命令调出你的系统信息。如果你得到了显卡信息,就说明 Vulkan 在正常工作。
$ vulkaninfo
访问 https://linuxconfig.org/install-and-test-vulkan-on-linux 以获取更多信息。
在 AMD 驱动程序之间切换[编辑 | 编辑源代码]
在 AMD 系统上,一次安装多个 Vulkan 驱动程序是有效的,可能需要在它们之间切换。
通过环境变量选择[编辑 | 编辑源代码]
自 amdvlk包 2021.Q3.4 起,一种新的切换逻辑会强制将 AMDVLK 设为默认并要求你必须选择一个
- 设置
AMD_VULKAN_ICD=RADV
以从默认的 AMDVLK 切换, - 或全局设置
DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1
以重新启用下面的 ICD 加载方法。
当 DISABLE_LAYER_AMD_SWITCHABLE_GRAPHICS_1=1
,可以通过设置环境变量 VK_ICD_FILENAMES
来选择首选驱动程序。例如,使用 RADV 驱动运行 Steam 是通过
$ VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd.d/radeon_icd.x86_64.json steam
为了避免32位游戏崩溃,可以分别分配32位变量和64位变量给环境变量。
通过 AMD Vulkan Prefixes 选择[编辑 | 编辑源代码]
AMD Vulkan Prefixes是用于在所有三种Vulkan实现之间切换的脚本。安装 amd-vulkan-prefixesAUR ,并在运行程序前添加前缀。可添加的前缀有 vk_radv
, vk_amdvlk
, 与 vk_pro
。例如,使用 AMDVLK 闭源驱动:
$ vk_pro command
软件 Vulkan: lavapipe[编辑 | 编辑源代码]
你还可以安装名为 lavapipe 的 Vulkan 软件光栅化器: vulkan-swrast包 。目前还没有32位的 vulkan-swrast 软件包。(即便 AUR 中也没有)
$ LIBGL_ALWAYS_SOFTWARE=1 __GLX_VENDOR_LIBRARY_NAME=mesa VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/lvp_icd.i686.json:/usr/share/vulkan/icd.d/lvp_icd.x86_64.json vulkaninfo
Vulkan 硬件数据库[编辑 | 编辑源代码]
硬件数据库提供了用户报告的 GPU/驱动程序组。使用 vulkan-caps-viewer-waylandAUR 或 vulkan-caps-viewer-x11AUR 可以提供自己的信息。
疑难解答[编辑 | 编辑源代码]
Nvidia - vulkan 无法工作并无法初始化[编辑 | 编辑源代码]
检查是否安装了其他 vulkan 驱动程序,这可能会阻止 NVIDIA 的 vulkan 驱动程序被检测到。
或者,设置 环境变量 VK_ICD_FILENAMES
为 /usr/share/vulkan/icd.d/nvidia_icd.json
。
如果你有双图形系统,比如 NVIDIA Optimus ,确保你的系统使用的是安装Vulkan驱动程序的显卡。
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
找不到显示 GPU 的设备。是否安装了 intel-mesa 驱动程序?[编辑 | 编辑源代码]
尝试将 intel_icd 与 primus_vk_wrapper 两者都配置进 VK_ICD_FILENAMES 列表
export VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/intel_icd.x86_64.json:/usr/share/vulkan/icd.d/nv_vulkan_wrapper.json
在 vulkaninfo 之后出现 AMDGPU - ERROR_INITIALIZATION_FAILED[编辑 | 编辑源代码]
如果在 GCN1 或 GCN2 系列的 AMD 卡上运行 vulkaninfo
后,你会收到如下错误消息:
ERROR at /build/vulkan-tools/src/Vulkan-Tools-1.2.135/vulkaninfo/vulkaninfo.h:240:vkEnumerateInstanceExtensionProperties failed with ERROR_INITIALIZATION_FAILED
然后检查你是否已正确启用对此型号显卡的支持(AMDGPU#开启 Southern Islands (SI) 和 Sea Islands (CIK) 支持)。
可以使用 lspci -k
检查 gpu 驱动程序是否已正确加载,在运行该命令后检查内核驱动中关于 gpu 的信息,它应该是 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 ...
在抛出 'dxvk::DxvkError' 的实例后调用终止[编辑 | 编辑源代码]
同时拥有 AMD 和 NVIDIA 驱动程序可能会导致问题。检查
pacman -Qs vulkan
local/lib32-amdvlk 2022.Q2.3-1 AMD's standalone Vulkan driver local/lib32-nvidia-utils 515.57-1 NVIDIA drivers utilities (32-bit) local/lib32-vulkan-icd-loader 1.3.221-1 Vulkan Installable Client Driver (ICD) Loader (32-bit) local/nvidia-utils 515.57-1 NVIDIA drivers utilities local/vulkan-icd-loader 1.3.221-1 Vulkan Installable Client Driver (ICD) Loader local/vulkan-tools 1.3.217-1 (vulkan-devel) Vulkan Utilities and Tools
并删除错误的驱动程序包。
玩 DirectX Vulkan 游戏时 AMD GPU 挂起[编辑 | 编辑源代码]
在使用 DirectX Vulkan 玩某些游戏时,Radeon-Vulkan 似乎会导致驱动程序和/或 GPU 挂起。
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 ...
切换到或启用 AMDVLK 似乎可以解决问题。