Proton 使用的 mesa+vulkan 驅動版本與主機 mesa 驅動版本不匹配
Proton 在最新的 DXVK 實施中執行良好,但是**當我瀏覽 Proton 使用的遊戲的日誌文件時,我注意到我的主機系統的檯面驅動程序版本與那裡列出的不匹配。**到目前為止,我所知道的是 dxvk 是一個橋接器,因此來自 D3D10/D3D11 的呼叫可以轉換為 Vulkan 並在您的主機系統中處理,因此依賴於您的圖形驅動程序和 Vulkan 檯面驅動程序(在我的例子中是 Amdgpu RADV)。
Proton 載入的遊戲(win64 遊戲)日誌中列出的 Vulkan 使用的 mesa 驅動程序版本和 apiversion :
AMD RADV POLARIS10 (LLVM 7.0.1):
驅動程序:18.3.6
Vulkan:1.1.70
vulkaninfo的輸出報告 apiversion “1.1.90”,它與 Proton 上使用的版本“1.1.70”不同:
Vulkan 實例版本:1.1.107
GPU id:0
(AMD RADV POLARIS10 (LLVM 8.0.0))
apiVersion = 0x40105a (1.1.90)
driverInfo = Mesa 19.1.0 (LLVM 8.0.0)
glxinfo的輸出與檯面驅動程序版本和vulkaninfo上顯示的 LLVM 版本一致:
OpenGL 渲染器字元串:Radeon RX 570 系列(POLARIS10、DRM 3.30.0、5.1.14-arch1-1-ARCH、LLVM 8.0.0)
OpenGL 核心配置文件版本字元串:4.5(核心配置文件)Mesa 19.1.0
此外,在 vulkan 環境初始化發生之前,會根據遊戲日誌的報告載入以下 DLL:
在 0x7fa05e6e0000 載入 L"C:\windows\system32\vulkan-1.dll": 內置
在 0x7fa05e6a0000 處載入 L"C:\windows\system32\winevulkan.dll":內置
也許這些 DLL 是這種不匹配的原因。
編輯:當使用自定義 DXVK_HUD 選項在****Lutris上打開另一個遊戲時,我可以看到vulkan API 版本和 mesa 版本都與我主機上的相應版本相**匹配。**仍然不知道為什麼 Proton 有這種行為。
總結
- Proton 的 LLVM 版本與我的圖形驅動程序上的版本不同:LLVM 7.0.1 (Proton) - LLVM 8.0.0 (Host)
- Proton 的 Mesa 驅動程序版本與在我的主機系統上提供 GL 和 VK 實現的 mesa 驅動程序版本不同:Mesa 18.3.6 (Proton) - Mesa 19.1.0 (Host)
- Proton 的 Vulkan API 版本與 vulkaninfo 報告的 Vulkan 實現使用的版本不同:1.1.70 (Proton) - 1.1.90 (Host)
我在這裡遺漏了一些東西,AFAIK Proton 沒有提供它自己的檯面實現。誰能解釋一下為什麼這些版本之間存在這種不匹配?
問題是我的 Steam 安裝來自 Flathub 儲存庫,其中執行時載入在隔離環境(沙箱)中。因此,steam 無法看到其根路徑(/home/user/var/app.valve…)。似乎隔離是在執行 DXVK_HUD 時顯示版本之間不匹配的原因,但我無法確認,正如您將在第 3 段中看到的那樣。
可能 Flathub 的蒸汽正在嚴重讀取我的主機包版本,報告不正確的版本但也使用它們,因為我什至沒有安裝 LLVM 7,那麼 DXVK_HUD 怎麼會說我正在使用它呢?
從現在開始,我通過刪除 Steam 的 Flathub 版本並安裝位於 multilib(32 位 ARCH 儲存庫)中的包解決了這個問題。現在 Mesa、Vulkan-API 和 LLVM 的版本在我的主機和 DXVK_HUD 顯示的主機之間匹配。我開始認為Flathub的steam版本的使用者之間可能存在這個問題,但是誰知道我沒有找到任何線上討論我的問題的文章。