Vulkan
- Vulkan是一种低开销、跨平台的3D图形和计算API。它于2016年首次发布,是 OpenGL 的继任者。
在 Vulkan的网站 了解更多信息。
安装
要运行 Vulkan 程序,你需要安装 vulkan-icd-loader包 软件包(如果想运行32位程序,还需要从multilib仓库安装 lib32-vulkan-icd-loader包)以及显卡的驱动程序。有几个软件包可以提供 vulkan-driver 和 lib32-vulkan-driver:
- AMD: vulkan-radeon包 (或 lib32-vulkan-radeon包)
- Intel: vulkan-intel包 (或 lib32-vulkan-intel包)
-
NVIDIA: 有两种实现:
- nvidia-utils包 (或 lib32-nvidia-utils包) - NVIDIA 专有
-
vulkan-nouveau包(或lib32-vulkan-nouveau包) - NVK (Mesa 项目的一部分)提示:启用 NVK 还需要额外的系统配置,有关详细信息,请参阅 Nouveau#使用 Mesa NVK Vulkan 驱动程序。
以下为软件光栅化器,可让您在不支持 Vulkan 的设备上使用。
- Lavapipe: vulkan-swrast包 (32位程序支持需安装lib32-vulkan-swrast包)
- SwiftShader: swiftshader-gitAUR
对于 Vulkan 程序开发,可以安装 vulkan-devel包组 软件包组。或者,也可以单独安装 vulkan-headers包,并根据需要选择安装 vulkan-validation-layers包、vulkan-man-pagesAUR 和 vulkan-tools包(其中包含 vulkaninfo 和 vkcube 工具)。
验证
要查看系统上当前安装了哪些 Vulkan 实现,请使用以下命令:
$ ls /usr/share/vulkan/icd.d/
为确保 Vulkan 在你的硬件上工作,安装 vulkan-tools包 并使用 vulkaninfo 命令调出你的系统信息。如果你得到了显卡信息,就说明 Vulkan 在正常工作。
$ vulkaninfo
访问 https://linuxconfig.org/install-and-test-vulkan-on-linux 以获取更多信息。
切换
在设备之间切换
在具有多个 GPU 的系统上,您可能需要强制使用特定 GPU。此功能需要安装 vulkan-mesa-implicit-layers包 软件包。通过将环境变量 MESA_VK_DEVICE_SELECT 设置为 vendorID:deviceID,可以选择所需的 GPU。
要列出可用的 GPU,请运行:
$ MESA_VK_DEVICE_SELECT=list vulkaninfo
在指定值的末尾添加 ! 可以强制使用所选 GPU。有关更多信息,请参阅 [https\://docs.mesa3d.org/envvars.html#vulkan-mesa-device-select-layer-environment-variables Vulkan Mesa 设备选择层环境变量]。
软件渲染
您可以安装名为lavapipe 的 Vulkan 光栅化软件,例如用于调试硬件问题:vulkan-swrast包 。(或者它的32位版本lib32-vulkan-swrast包).
以下示例展示了如何通过设置必要的环境变量运行 vulkaninfo,以强制 Vulkan 和 OpenGL 完全使用软件渲染(其中 __GLX_VENDOR_LIBRARY_NAME=mesa 可确保该命令同样适用于使用 PRIME 的用户):
$ LIBGL_ALWAYS_SOFTWARE=1 __GLX_VENDOR_LIBRARY_NAME=mesa VK_DRIVER_FILES=/usr/share/vulkan/icd.d/lvp_icd.json vulkaninfo
Vulkan 硬件数据库
硬件数据库提供了用户报告的 GPU/驱动程序组。使用 vulkan-caps-viewer-waylandAUR 或 vulkan-caps-viewer-x11AUR 可以提供自己的信息。
疑难解答
NVIDIA - vulkan 无法工作并无法初始化
环境变量
无效或相互冲突的环境变量值可能导致 Vulkan 无法正常工作,而不恰当的设置可能导致配备多个 GPU 的系统使用非预期的 GPU。正确设置这些变量还有助于在不需要使用辅助 GPU 时使其保持关闭状态。
GPU 切换
如果系统配备多个 GPU,而 Vulkan 无法检测或使用其中某个 GPU,请确保该 GPU 未被 BIOS/UEFI 或内核禁用。有关不同 GPU 切换方式的概述,请参阅 NVIDIA Optimus。
以下示例展示了使用 optimus-manager-gitAUR 检查当前状态的命令:
$ 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
GSP 固件
找不到显示 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 ...
Vulkan 应用程序启动缓慢(延迟 30 秒)
启动时,Vulkan 会尝试初始化由 环境变量 VK_DRIVER_FILES 指定的可安装客户端驱动程序(Installable Client Driver,ICD)。该变量指向一个文件(例如 NVIDIA 的 /usr/share/vulkan/icd.d/nvidia_icd.json),其中包含 Vulkan GPU 驱动程序路径的相关信息。如果该变量指向了错误的 ICD JSON 文件,某些应用程序(例如基于 Chromium/Electron 的应用程序)可能会在启动时出现延迟,直到达到 30 秒的超时时间。
当 nvidia_icd.json 文件存在时,Vulkan 会尝试先于 Radeon 驱动程序加载 NVIDIA 驱动程序。因此,对于安装了 nvidia-utils包 软件包(例如为了使用 cuda包)的 Radeon GPU 系统,可能需要手动设置环境变量 VK_DRIVER_FILES=/usr/share/vulkan/icd.d/radeon_icd.json。
在混合图形技术配置中,即使已经关闭独立 GPU(dGPU),Vulkan 仍可能尝试加载 NVIDIA 驱动程序。在这种情况下,应将 VK_DRIVER_FILES 设置为集成 GPU(iGPU)驱动程序对应的 ICD 文件。也可以完全取消设置该变量,这种方法似乎同样有效,但其行为未定义,因此不推荐使用。