Merge pull request #2799 from Cacodemon345/qt-hardware-renderer
qt: disable Vulkan early if not available
This commit is contained in:
@@ -75,6 +75,10 @@ extern "C" {
|
||||
#include <QScreen>
|
||||
#include <QString>
|
||||
#include <QDir>
|
||||
#if QT_CONFIG(vulkan)
|
||||
#include <QVulkanInstance>
|
||||
#include <QVulkanFunctions>
|
||||
#endif
|
||||
|
||||
#include <array>
|
||||
#include <unordered_map>
|
||||
@@ -325,10 +329,25 @@ MainWindow::MainWindow(QWidget *parent) :
|
||||
ui->actionVNC->setVisible(false);
|
||||
#endif
|
||||
|
||||
#if !QT_CONFIG(vulkan)
|
||||
#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);
|
||||
#endif
|
||||
}
|
||||
|
||||
QActionGroup* actGroup = nullptr;
|
||||
|
||||
|
@@ -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});
|
||||
|
Reference in New Issue
Block a user