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