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 是一个基于VulkanDirect3D 12图形库
  • 可通过以下步骤检查显卡支持的DXVKvkd3d版本,并安装尽可能新的版本
组件名称 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.参考文档

发表评论