1.判断是否需要32位显卡驱动
- 由于部分游戏的安装器、启动器、游戏本体等组件混合使用32位与64位程序,建议同时安装64位与32位显卡驱动;
- 以下内容,以
$
开头的部分表示需在终端内执行;
1.1 检查可执行文件
- 使用file命令检查exe文件,例如:
$ file installer.exe
- 若出现以下内容,则说明需要安装32位驱动
PE32 executable (GUI) Intel 80386
- 若出现以下内容,则说明需要安装64位驱动
PE32+ executable (GUI) x86-64
1.2 检查错误日志
若发现程序无法启动,可尝试以下方式排查是否缺少32位显卡驱动
点击程序图标旁的【…】,选择【高级调试工具】,如下图:
在弹出的窗口中右键程序图标,选择【在终端中运行】,如下图:
若错误日志中出现加载/lib/i386-linux-gnu/路径下的文件失败,说明缺少32位显卡驱动
例如:
libGL error: MESA-LOADER: failed to open radeonsi: /usr/lib/pressure-vessel/overrides/lib/i386-linux-gnu/dri/radeonsi_dri.so: cannot open shared object file: No such file or directory (search paths /usr/lib/pressure-vessel/overrides/lib/x86_64-linux-gnu/dri:/usr/lib/pressure-vessel/overrides/lib/i386-linux-gnu/dri)
libGL error: failed to load driver: radeonsi
2.安装显卡驱动
2.1 安装64位显卡驱动
2.1.1 NVIDIA 显卡
$ sudo apt install nvidia-driver-full
2.1.2 AMD 卡或 Intel 显卡
$ sudo apt install mesa-vulkan-drivers libvulkan1 libglx-mesa0 libgl1-mesa-dri
2.1.3 检查 Vulkan 安装情况
$ sudo apt install vulkan-tools
$ vkcube
若能显示GUI界面,则说明安装成功
说明:32位与64位vulkan-tools会相互覆盖,如需测试32位驱动,需按照说明重新安装
2.2 安装32位显卡驱动
2.2.1 启用 32 位支持
$ sudo dpkg --add-architecture i386
$ sudo apt update
$ sudo apt upgrade
2.2.2 NVIDIA 显卡
$ sudo apt install nvidia-driver-full nvidia-vulkan-icd:i386 libvulkan1:i386
2.2.3 AMD 卡或 Intel 显卡
$ sudo apt install mesa-vulkan-drivers:i386 libvulkan1:i386 libglx-mesa0:i386 libgl1-mesa-dri:i386
2.2.4 检查 Vulkan 安装情况
$ sudo apt install vulkan-tools:i386
$ vkcube
若能显示GUI界面,则说明安装成功
说明:32位与64位vulkan-tools会相互覆盖,如需测试64位驱动,需按照说明重新安装3.判断显卡支持的 DXVK 与 vkd3d 版本
3.判断显卡支持的 DXVK 与 vkd3d 版本
DXVK
是一个开源的翻译层,将Direct3D 8/9/10/11
函数呼叫转换到Vulkan
vkd3d
是一个基于Vulkan
的Direct3D 12
图形库- 可通过以下步骤检查显卡支持的
DXVK
与vkd3d
版本,并安装尽可能新的版本
组件名称 | DXVK | DXVK | vkd3d | vkd3d |
组件版本 | 2.x | 1.x | ≥ 2.9 | ≤ 2.8 |
Vulkan API | ≥ 1.3 | ≥ 1.1 | ≥ 1.3 | ≥ 1.1 |
Vulkan 扩展 | VK_EXT_robustness2 VK_EXT_transform_feedback |
VK_EXT_robustness2 VK_KHR_push_descriptor |
VK_EXT_descriptor_indexing VK_KHR_timeline_semaphore VK_KHR_sampler_mirror_clamp_to_edge VK_EXT_robustness2 VK_KHR_separate_depth_stencil_layouts VK_KHR_bind_memory2 VK_KHR_copy_commands2 VK_KHR_dynamic_rendering VK_EXT_extended_dynamic_state VK_EXT_extended_dynamic_state2 VK_KHR_buffer_device_address VK_KHR_push_descriptor |
|
Vulkan 扩展 检查方法 |
$ vulkaninfo | grep -E "VK_EXT_robustness2| VK_EXT_transform_feedback" |
$ vulkaninfo | grep -E "VK_EXT_robustness2| VK_KHR_push_descriptor" |
$ vulkaninfo | grep -E "VK_EXT_descriptor_indexing| VK_KHR_timeline_semaphore| VK_KHR_sampler_mirror_clamp_to_edge| VK_EXT_robustness2| VK_KHR_separate_depth_stencil_layouts| VK_KHR_bind_memory2| VK_KHR_copy_commands2| VK_KHR_dynamic_rendering| VK_EXT_extended_dynamic_state| VK_EXT_extended_dynamic_state2| VK_KHR_buffer_device_address| VK_KHR_push_descriptor" |
|
Vulkan 特性 | samplerMirrorClampToEdge shaderDrawParameters |
VkPhysicalDeviceDescriptorIndexingFeatures | ||
Vulkan 特性 检查方法 |
$ vulkaninfo | grep -E "samplerMirrorClampToEdge| shaderDrawParameters" |
$ vulkaninfo | grep -A 22 "VkPhysicalDeviceDescriptorIndexingFeatures" |
-
3.1 检查 Vulkan API 版本
- 安装 Vulkan 相关工具
# 64位
$ sudo apt install vulkan-tools
# 32位
$ sudo apt install vulkan-tools:i386
检查 Vulkan API 版本
$ vulkaninfo | grep "apiVersion"
3.2 DXVK
可尽量选择新的dxvk版本
3.2.1 DXVK 2.x 版本
- 需要 Vulkan API ≥ 1.3
- 需要VK_EXT_robustness2扩展
- 需要VK_EXT_transform_feedback扩展
检查拓展
* 若拓展未出现,则说明不支持拓展
$ vulkaninfo | grep -E "VK_EXT_robustness2|VK_EXT_transform_feedback"
VK_EXT_robustness2 : extension revision 1
VK_EXT_transform_feedback : extension revision 1
3.2.2 DXVK 1.x 版本
需要 Vulkan API ≥ 1.1
3.3 vkd3d
可尽量选择新的vkd3d版本
3.3.1 vkd3d ≥ 2.9 版本
- 需要 Vulkan API ≥ 1.3
- 需要 samplerMirrorClampToEdge特性
- 需要 shaderDrawParameters特性
- 需要 VK_EXT_robustness2扩展
- 需要 VK_KHR_push_descriptor扩展
检查拓展
* 若拓展未出现,则说明不支持拓展
$ vulkaninfo | grep -E "VK_EXT_robustness2|VK_KHR_push_descriptor"
VK_EXT_robustness2 : extension revision 1
VK_KHR_push_descriptor : extension revision 2
检查特性
* 若特性出现false,则说明支持的特性不完整
$ vulkaninfo | grep -E "samplerMirrorClampToEdge|shaderDrawParameters"
shaderDrawParameters = true
shaderDrawParameters = true
samplerMirrorClampToEdge = true
3.3.2 vkd3d ≤ 2.8 版本
- 需要 Vulkan API ≥ 1.1
- 需要 VK_EXT_descriptor_indexing扩展
- 需要 VkPhysicalDeviceDescriptorIndexingFeatures全部特性
- 需要 VK_KHR_timeline_semaphore扩展
- 需要 VK_KHR_sampler_mirror_clamp_to_edge扩展
- 需要 VK_EXT_robustness2扩展
- 需要 VK_KHR_separate_depth_stencil_layouts扩展
- 需要 VK_KHR_bind_memory2扩展
- 需要 VK_KHR_copy_commands2扩展
- 需要 VK_KHR_dynamic_rendering扩展
- 需要 VK_EXT_extended_dynamic_state扩展
- 需要 VK_EXT_extended_dynamic_state2扩展
- 需要 VK_KHR_buffer_device_address扩展
- 需要 VK_KHR_push_descriptor扩展
检查拓展
* 若拓展未出现,则说明不支持拓展
$ vulkaninfo | grep -E "VK_EXT_descriptor_indexing|VK_KHR_timeline_semaphore|VK_KHR_sampler_mirror_clamp_to_edge|VK_EXT_robustness2|VK_KHR_separate_depth_stencil_layouts|VK_KHR_bind_memory2|VK_KHR_copy_commands2|VK_KHR_dynamic_rendering|VK_EXT_extended_dynamic_state|VK_EXT_extended_dynamic_state2|VK_KHR_buffer_device_address|VK_KHR_push_descriptor"
VK_EXT_descriptor_indexing : extension revision 2
VK_EXT_extended_dynamic_state : extension revision 1
VK_EXT_extended_dynamic_state2 : extension revision 1
VK_EXT_extended_dynamic_state3 : extension revision 2
VK_EXT_robustness2 : extension revision 1
VK_KHR_bind_memory2 : extension revision 1
VK_KHR_buffer_device_address : extension revision 1
VK_KHR_copy_commands2 : extension revision 1
VK_KHR_dynamic_rendering : extension revision 1
VK_KHR_dynamic_rendering_local_read : extension revision 1
VK_KHR_push_descriptor : extension revision 2
VK_KHR_sampler_mirror_clamp_to_edge : extension revision 3
VK_KHR_separate_depth_stencil_layouts : extension revision 1
VK_KHR_timeline_semaphore : extension revision 2
检查特性
* 若特性出现false,则说明支持的特性不完整
$ vulkaninfo | grep -A 22 "VkPhysicalDeviceDescriptorIndexingFeatures"
VkPhysicalDeviceDescriptorIndexingFeatures:
-------------------------------------------
shaderInputAttachmentArrayDynamicIndexing = true
shaderUniformTexelBufferArrayDynamicIndexing = true
shaderStorageTexelBufferArrayDynamicIndexing = true
shaderUniformBufferArrayNonUniformIndexing = true
shaderSampledImageArrayNonUniformIndexing = true
shaderStorageBufferArrayNonUniformIndexing = true
shaderStorageImageArrayNonUniformIndexing = true
shaderInputAttachmentArrayNonUniformIndexing = true
shaderUniformTexelBufferArrayNonUniformIndexing = true
shaderStorageTexelBufferArrayNonUniformIndexing = true
descriptorBindingUniformBufferUpdateAfterBind = true
descriptorBindingSampledImageUpdateAfterBind = true
descriptorBindingStorageImageUpdateAfterBind = true
descriptorBindingStorageBufferUpdateAfterBind = true
descriptorBindingUniformTexelBufferUpdateAfterBind = true
descriptorBindingStorageTexelBufferUpdateAfterBind = true
descriptorBindingUpdateUnusedWhilePending = true
descriptorBindingPartiallyBound = true
descriptorBindingVariableDescriptorCount = true
runtimeDescriptorArray = true
4.其它问题
4.1 AMD显卡: Southern Islands (SI) 和 Sea Islands (CIK)
该系列显卡同时支持radeon与amdgpu驱动,需切换至radeon驱动
使用以下命令检查当前使用的显卡驱动
$ lspci -k | grep -A 3 -E "(VGA|3D)"
若显示以下内容,则说明显卡不支持 Vulkan API
Kernel driver in use: radeon
Kernel modules: radeon
若显示以下内容,则说明需切换显卡驱动至amdgpu
Kernel driver in use: radeon
Kernel modules: radeon, amdgpu
4.1.1 方法1
- 编辑内核启动参数
-
$ sudo vim /etc/default/grub
在GRUB_CMDLINE_LINUX_DEFAULT后的双引号内添加以下内容,需与已有内容以空格分隔
radeon.si_support=0 amdgpu.si_support=1 radeon.cik_support=0 amdgpu.cik_support=1
更新grub
$ sudo update-grub
重启 reboot
再次检查显卡驱动,若显示以下内容,则说明切换成功
Kernel driver in use: amdgpu
Kernel modules: radeon, amdgpu
4.1.2 方法2
创建/etc/modprobe.d/amdgpu.conf配置文件
$ sudo vim /etc/modprobe.d/amdgpu.conf
options amdgpu si_support=1
options amdgpu cik_support=1
创建/etc/modprobe.d/radeon.conf配置文件
$ sudo vim /etc/modprobe.d/radeon.conf
options radeon si_support=0
options radeon cik_support=0
更新initramfs
$ sudo update-initramfs -u
重启 reboot
再次检查显卡驱动,若显示以下内容,则说明切换成功
Kernel driver in use: amdgpu
Kernel modules: radeon, amdgpu
5.参考文档
- DXVK: Driver support https://github.com/doitsujin/dxvk/wiki/Driver-support
- vkd3d: Drivers https://github.com/HansKristian-Work/vkd3d-proton/?tab=readme-ov-file#drivers
- vkd3d v2.8: Drivers https://github.com/HansKristian-Work/vkd3d-proton/tree/v2.8?tab=readme-ov-file#drivers
- AMDGPU: 开启 Southern Islands (SI) 和 Sea Islands (CIK) 支持 https://wiki.archlinuxcn.org/wiki/AMDGPU