Vulkan
- Vulkan是一種低開銷、跨平台的3D圖形和計算API。它於2016年首次發佈,是 OpenGL 的繼任者。
在 Khronos 了解更多信息。
安裝[編輯 | 編輯原始碼]
要運行 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維護)
- Lavapipe: vulkan-swrast包 (32位程序支持需安裝lib32-vulkan-swrast包) 軟件光柵化器,僅推薦用於沒有 Vulkan 支持的設備
- SwiftShader: swiftshader-gitAUR
對於 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 以獲取更多信息。
切換[編輯 | 編輯原始碼]
在設備之間切換[編輯 | 編輯原始碼]
在具有多個 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
device_index
。在 AMD 驅動程序之間切換[編輯 | 編輯原始碼]
在 AMD 系統上,一次安裝多個 Vulkan 驅動程序是有效的,可能需要在它們之間切換。
通過環境變量選擇[編輯 | 編輯原始碼]
自 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-waylandAUR 或 vulkan-caps-viewer-x11AUR 可以提供自己的信息。
疑難解答[編輯 | 編輯原始碼]
NVIDIA - vulkan 無法工作並無法初始化[編輯 | 編輯原始碼]
檢查是否安裝了其他 vulkan 驅動程序,這可能會阻止 NVIDIA 的 vulkan 驅動程序被檢測到。
或者,設置環境變量 VK_ICD_FILENAMES
為 /usr/share/vulkan/icd.d/nvidia_icd.json
。
如果你有雙圖形系統,比如 NVIDIA Optimus ,確保你的系統使用的是安裝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 ...
在拋出 '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-Polaris 和 Vega的支持。如果你的GPU被amdvlk包移出了支持列表, 需要刪除它 並安裝 vulkan-radeon包.
關於多顯卡切換解決方案,可參考bilibili 上的文章。