Vulkan (简体中文) - ArchWiki

Jump to content
翻译状态：本文是 Vulkan 的翻译。上次翻译日期：2022-08-23。如果英文版本有所更改，则您可以帮助同步翻译。

来自 wikipedia:Vulkan (API):

  Vulkan是一种低开销、跨平台的3D图形和计算API。

在 Khronos 了解更多信息。

## 安装

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

- Vulkan 目前没有被 Bumblebee [1] 官方支持，但可以工作在 primus_vk 或 primus-vk-gitAUR上。
- Radeon Vulkan 驱动程序现在支持 PRIME [2]。

要运行 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 闭源驱动。

自 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 中）

警告： “lavapipe 不是符合要求的 Vulkan 实现，仅用于测试。”（引自驱动程序本身）

    $ 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驱动程序的显卡。

This article or section needs expansion.

Reason: optimus-manager 只是 NVIDIA Optimus 的几个实用程序之一。 (Discuss in Talk:Vulkan (简体中文))

This article or section needs language, wiki syntax or style improvements. See Help:Style for reference.

Reason: 代码块中的命令需要 提示符号。 (Discuss in 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#Enable Southern Islands (SI) and Sea Islands (CIK) support）。

可以使用 `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 似乎可以解决问题。

有关此问题的一些论坛帖子： [5] [6]

Categories:

- Graphics (简体中文)
- Development (简体中文)

Hidden categories:

- Pages or sections flagged with Template:Expansion
- Pages or sections flagged with Template:Style