#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 вместо GPU3. 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 устраняет проблему.