Vulkan

来自 Arch Linux 中文维基

来自 wikipedia:Vulkan (API):

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

Khronos 了解更多信息。

安装[编辑 | 编辑源代码]

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

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

对于 Vulkan 程序开发,安装 vulkan-headers,以及可选的 vulkan-validation-layersvulkan-tools (你可以在这里找到 vulkaninfo 工具)。

验证[编辑 | 编辑源代码]

要查看系统上当前安装了哪些 Vulkan 实现,请使用以下命令:

$ ls /usr/share/vulkan/icd.d/

为确保 Vulkan 在你的硬件上工作,安装 vulkan-tools 并使用 vulkaninfo 命令调出你的系统信息。如果你得到了显卡信息,就说明 Vulkan 在正常工作。

$ vulkaninfo

访问 https://linuxconfig.org/install-and-test-vulkan-on-linux 以获取更多信息。

切换[编辑 | 编辑源代码]

在设备之间切换[编辑 | 编辑源代码]

在具有多个 GPU 的系统上,您可能需要强制使用特定 GPU。 vkdevicechooserAUR 提供了简单的方法来做到这一点。它将安装到系统的 Vulkan层 目录, /usr/share/vulkan/implicit_layer.d/.

要运行强制使用特定设备的 Vulkan 应用程序,请使用以下环境变量启动它:

$ ENABLE_DEVICE_CHOOSER_LAYER=1 VULKAN_DEVICE_INDEX=device_index

需要用 vulkaninfo (没有启用图层) 所报告的设备idGPU id替换device_index

注意: 一些应用程序 (例如Steam) 可能会改变设备索引device_index

在 AMD 驱动程序之间切换[编辑 | 编辑源代码]

在 AMD 系统上,一次安装多个 Vulkan 驱动程序是有效的,可能需要在它们之间切换。

通过环境变量选择[编辑 | 编辑源代码]

提示:这个方法不能用于选择 AMDVLK 闭源驱动。

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-prefixesCNRepo ,并在运行程序前添加前缀。可添加的前缀有 vk_radv, vk_amdvlk, 与 vk_pro 。例如,使用 AMDVLK 闭源驱动:

$ vk_pro command

软件渲染[编辑 | 编辑源代码]

您可以安装名为lavapipe 的 Vulkan 光栅化软件,例如用于调试硬件问题:vulkan-swrast 。(或者它的32位版本lib32-vulkan-swrast).

$ 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-waylandAURvulkan-caps-viewer-x11AUR 可以提供自己的信息。

疑难解答[编辑 | 编辑源代码]

NVIDIA - vulkan 无法工作并无法初始化[编辑 | 编辑源代码]

检查是否安装了其他 vulkan 驱动程序,这可能会阻止 NVIDIA 的 vulkan 驱动程序被检测到。

或者,设置环境变量 VK_ICD_FILENAMES/usr/share/vulkan/icd.d/nvidia_icd.json

如果你有双图形系统,比如 NVIDIA Optimus ,确保你的系统使用的是安装Vulkan驱动程序的显卡。

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

原因: optimus-manager 只是 NVIDIA Optimus 的几个实用程序之一。 (在 Talk:Vulkan 中讨论)

本文或本章节的语言、语法或风格需要改进。参考:帮助:风格

原因:Command in code block requires a prompt symbol.(在Talk: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
...

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

在抛出 '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 似乎可以解决问题。

DirectX Vulkan 游戏崩溃[编辑 | 编辑源代码]

AMDVLK 已被报告导致多个用户的崩溃(见 BBS#284118, BBS#283008, BBS#274737):切换到或启用 Radeon-Vulkan 驱动程序可解决此问题。

AMDGPU - Vulkan 应用程序启动过慢[编辑 | 编辑源代码]

如果您安装了cuda 软件包,您可能会发现 Vulkan 应用程序(例如 Chromium)启动缓慢。这是因为 nvidia-utils 提供了 Vulkan 驱动程序,而 Vulkan 会在 radeon 驱动程序之前尝试 nvidia 驱动程序。要解决此问题,请将环境变量 VK_DRIVER_FILES 设置为 /usr/share/vulkan/icd.d/radeon_icd.i686.json:/usr/share/vulkan/icd。 d/radeon_icd.x86_64.json

AMDGPU - 找不到驱动程序![编辑 | 编辑源代码]

当遇到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 经常放弃对pre-PolarisVega的支持。如果你的GPU被amdvlk移出了支持列表, 需要删除它 并安装 vulkan-radeon.

关于多显卡切换解决方案,可参考bilibili 上的文章