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 没有提供它自己的台面实现。谁能解释一下为什么这些版本之间存在这种不匹配?