From 2dc2d912b2ebd2ac1672792d336b245bc191b34b Mon Sep 17 00:00:00 2001 From: Cacodemon345 Date: Thu, 3 Nov 2022 21:58:54 +0600 Subject: [PATCH] qt: disable Vulkan early if not available --- src/qt/qt_mainwindow.cpp | 25 ++++++++++++++++++++++--- src/qt/qt_vulkanwindowrenderer.cpp | 12 +----------- 2 files changed, 23 insertions(+), 14 deletions(-) diff --git a/src/qt/qt_mainwindow.cpp b/src/qt/qt_mainwindow.cpp index 0f3c152f5..9e81531ab 100644 --- a/src/qt/qt_mainwindow.cpp +++ b/src/qt/qt_mainwindow.cpp @@ -75,6 +75,10 @@ extern "C" { #include #include #include +#if QT_CONFIG(vulkan) +#include +#include +#endif #include #include @@ -325,10 +329,25 @@ MainWindow::MainWindow(QWidget *parent) : ui->actionVNC->setVisible(false); #endif -#if !QT_CONFIG(vulkan) - if (vid_api == 4) vid_api = 0; - ui->actionVulkan->setVisible(false); +#if QT_CONFIG(vulkan) + bool vulkanAvailable = false; + { + QVulkanInstance instance; + instance.setApiVersion(QVersionNumber(1, 0)); + if (instance.create()) { + uint32_t physicalDevices = 0; + instance.functions()->vkEnumeratePhysicalDevices(instance.vkInstance(), &physicalDevices, nullptr); + if (physicalDevices != 0) { + vulkanAvailable = true; + } + } + } + if (!vulkanAvailable) #endif + { + if (vid_api == 4) vid_api = 0; + ui->actionVulkan->setVisible(false); + } QActionGroup* actGroup = nullptr; diff --git a/src/qt/qt_vulkanwindowrenderer.cpp b/src/qt/qt_vulkanwindowrenderer.cpp index 629665d62..ba32d6e9b 100644 --- a/src/qt/qt_vulkanwindowrenderer.cpp +++ b/src/qt/qt_vulkanwindowrenderer.cpp @@ -795,18 +795,8 @@ VulkanWindowRenderer::VulkanWindowRenderer(QWidget* parent) : QVulkanWindow(parent->windowHandle()) { parentWidget = parent; - instance.setLayers(QByteArrayList() << "VK_LAYER_KHRONOS_validation"); - instance.setExtensions(QByteArrayList() << "VK_EXT_debug_report"); instance.setApiVersion(QVersionNumber(1, 0)); - if (!instance.create()) { - throw std::runtime_error("Could not create Vulkan instance"); - } - uint32_t physicalDevices = 0; - instance.functions()->vkEnumeratePhysicalDevices(instance.vkInstance(), &physicalDevices, nullptr); - if (physicalDevices == 0) { - throw std::runtime_error("No physical devices available."); - } - qDebug() << instance.layers(); + instance.create(); setVulkanInstance(&instance); setPhysicalDeviceIndex(0); setPreferredColorFormats({VK_FORMAT_B8G8R8A8_UNORM, VK_FORMAT_R8G8B8A8_UNORM, VK_FORMAT_A8B8G8R8_UNORM_PACK32});