切换操作系统版本,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应用程序框架原型

Vulkan Tutorial 13 Render passes

Vulkan Tutorial 03 理解Instance

Windows 11 快速体验:开始菜单居中,全系圆角设计!