切换操作系统版本,vulkan 程序停止工作
Posted
技术标签:
【中文标题】切换操作系统版本,vulkan 程序停止工作【英文标题】:Switched OS version, vulkan program stopped working 【发布时间】:2021-08-21 08:48:14 【问题描述】:当我从 Ubuntu 20.04 升级到 21.04 时,我正在开发的程序停止工作
我怀疑正在发生的事情是,我正在使用 conan 安装依赖项,包括 sdk 中的内容(加载程序、标头、验证层)。
vkcube 和 vulkaninfo 运行,所以 vulkan 本身没问题。
conan 包版本(其版本与每个项目的官方 github repos 的版本匹配)是:
"vulkan-headers/1.2.184",
"vulkan-loader/1.2.182",
"vulkan-validationlayers/1.2.182"
我从 vulkaninfo 得到以下信息:
vulkaninfo | grep Instance
WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
Vulkan Instance Version: 1.2.182
Instance Extensions: count = 18
WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
maxMultiviewInstanceIndex = 2147483647
maxMultiviewInstanceIndex = 2147483647
drawIndirectFirstInstance = true
vertexAttributeInstanceRateDivisor = true
vertexAttributeInstanceRateZeroDivisor = true
drawIndirectFirstInstance = true
vertexAttributeInstanceRateDivisor = true
vertexAttributeInstanceRateZeroDivisor = false
我也尝试下载最新的 sdk 并运行 setu-env.sh 脚本,看看是否可以修复它,但它似乎没有任何作用。
我得到的确切问题是,调用时出现分段错误:
physical_device.getQueueFamilyProperties();
(我使用的是.hpp头文件)
我不完全确定为什么事情停止工作,我怀疑我的 vulkan.hpp 标头和我的 vulkan 库之间可能不匹配,但我不知道如何检查。而且我不确定这实际上是问题所在。
我在运行 vulkaninfo | grep GPU
时也得到了这个:
WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
GPU id = 0 (AMD RADV RAVEN2 (ACO))
GPU id = 1 (llvmpipe (LLVM 12.0.0, 256 bits))
GPU id = 0 (AMD RADV RAVEN2 (ACO))
GPU id = 1 (llvmpipe (LLVM 12.0.0, 256 bits))
GPU id : 0 (AMD RADV RAVEN2 (ACO)):
GPU id : 1 (llvmpipe (LLVM 12.0.0, 256 bits)):
WARNING: lavapipe is not a conformant vulkan implementation, testing use only.
GPU0:
deviceType = PHYSICAL_DEVICE_TYPE_INTEGRATED_GPU
GPU1:
【问题讨论】:
哪个 MESA 版本?它似乎停止使用 GPU。检查vulkaninfo | grep GPU
所说的内容。 llvmpipe
似乎不是你想要的。
@Swift-FridayPie 我添加了它,我似乎没有找到任何与台面相关的东西。我确实明白了:driverInfo = Mesa 21.0.3 (ACO)
如果我用 grep 搜索 Mesa 而不是 GPU
MESA 是你的图形后端,你升级到的 20.1 + 获得了 Vulkan 的设备选择层。显然当前选择了错误的设备(在您的情况下是 1 而不是 0,vkEnumeratePhysicalDevices
中的顺序是 random)。检查 MESA_VK_DEVICE_SELECT 以开始
抱歉,在哪里查看?我试图在 vulkaninfo 和 printenv 上都使用 grep ,结果都是空的。 (感谢您的帮助)
【参考方案1】:
这条 reddit 评论似乎是解决方案: https://www.reddit.com/r/Fedora/comments/krz20h/vulkan_swrast_lavapipe_is_getting_used_instead_of/
具体来说:
阅读 Archwiki 后,我发现确实使用的是 lavapipe 而不是 radeon。 导出 VK_ICD_FILENAMES=/usr/share/vulkan/icd.d/radeon_icd.x86_64.json 解决了这个问题。
【讨论】:
以上是关于切换操作系统版本,vulkan 程序停止工作的主要内容,如果未能解决你的问题,请参考以下文章
Vulkan Tutorial 29 Loading models
Vulkan Tutorial 02 编写Vulkan应用程序框架原型
Vulkan Tutorial 02 编写Vulkan应用程序框架原型