跳至內容

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 文件。也可以完全取消設置該變量,這種方法似乎同樣有效,但其行為未定義,因此不推薦使用。