跳转到内容

Vulkan

来自 Arch Linux 中文维基

来自 wikipedia:Vulkan (API):

Vulkan是一种低开销、跨平台的3D图形和计算API。它于2016年首次发布,是 OpenGL 的继任者。

在 Vulkan的网站 了解更多信息。

安装

提示:在混合图形技术(NVIDIA Optimus/AMD Dynamic Switchable Graphics)上:

要运行 Vulkan 程序,你需要安装 vulkan-icd-loader包 软件包(如果想运行32位程序,还需要从multilib仓库安装 lib32-vulkan-icd-loader包)以及显卡的驱动程序。有几个软件包可以提供 vulkan-driver 和 lib32-vulkan-driver:

以下为软件光栅化器,可让您在不支持 Vulkan 的设备上使用。

对于 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。

这篇文章的某些内容需要扩充。

原因:是否有更简单的方法可以在不安装 AUR 软件包的情况下检查这些信息? (在 Talk:Vulkan 中讨论)

以下示例展示了使用 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 固件

参阅 NVIDIA/故障排除#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
...

关于这个问题的一些论坛主题:[3] [4]

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 文件。也可以完全取消设置该变量,这种方法似乎同样有效,但其行为未定义,因此不推荐使用。