Поменялась версия ОС, программа вулкан перестала работать

#c #linux #graphics #vulkan

Вопрос:

Программа, которую я разрабатывал, перестала работать, когда я обновил Ubuntu с 20.04 до 21.04

Я подозреваю, что происходит то, что я использую conan для установки зависимостей, включая то, что будет внутри sdk (загрузчик, заголовки, уровни проверки).

vkcube и vulkaninfo работают, так что сам вулкан в порядке.

Версии пакетов conan (управление версиями которых совпадает с версиями официальных репозиториев github для каждого проекта) являются:

     "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:
 

Комментарии:

1. какая версия MESA? Похоже, он перестал использовать графический процессор. Проверь, что vulkaninfo | grep GPU там написано. llvmpipe похоже, это не то, чего ты хочешь.

2. @Swift-FridayPie Я добавил это, кажется, я не нашел ничего, связанного с мезой. Я действительно понимаю это: driverInfo = Mesa 21.0.3 (ACO) если я буду использовать grep для Mesa вместо GPU

3. MESA-это ваш графический сервер, и 20.1 , до которого вы обновились, получил уровень выбора устройств для Vulkan. По-видимому, в настоящее время выбрано неправильное устройство (в вашем случае 1 вместо 0, порядок vkEnumeratePhysicalDevices ввода является случайным ). Проверьте MESA_VK_DEVICE_SELECT для начала

4. Извините, проверяю это где? Я попытался проверить это как на vulkaninfo, так и на printenv, и оба вышли пустыми. (спасибо вам за вашу помощь)

Ответ №1:

Этот комментарий reddit, похоже, был решением: https://www.reddit.com/r/Fedora/comments/krz20h/vulkan_swrast_lavapipe_is_getting_used_instead_of/

конкретно:

Прочитав Archwiki, я обнаружил, что вместо radeon действительно используется lavapipe. экспорт файлов VK_ICD_FILENAMES=/usr/share/вулкан/icd.d/radeon_icd.x86_64.json устраняет проблему.