6#include <QLoggingCategory>
10Q_LOGGING_CATEGORY(lcGuiVk,
"qt.vulkan")
12static QVulkanInstance *s_vulkanInstance;
13Q_CONSTINIT
static QVulkanDefaultInstance::Flags s_vulkanInstanceFlags;
15QVulkanDefaultInstance::Flags QVulkanDefaultInstance::flags()
17 return s_vulkanInstanceFlags;
20void QVulkanDefaultInstance::setFlag(Flag flag,
bool on)
23 qWarning(
"QVulkanDefaultInstance::setFlag called when Vulkan instance is already created; this has no effect");
25 s_vulkanInstanceFlags.setFlag(flag, on);
28bool QVulkanDefaultInstance::hasInstance()
30 return s_vulkanInstance !=
nullptr;
33QVulkanInstance *QVulkanDefaultInstance::instance()
36 return s_vulkanInstance;
38 s_vulkanInstance =
new QVulkanInstance;
56 const QVersionNumber supportedVersion = s_vulkanInstance->supportedApiVersion();
57 if (supportedVersion >= QVersionNumber(1, 4))
58 s_vulkanInstance->setApiVersion(QVersionNumber(1, 4));
59 else if (supportedVersion >= QVersionNumber(1, 3))
60 s_vulkanInstance->setApiVersion(QVersionNumber(1, 3));
61 else if (supportedVersion >= QVersionNumber(1, 2))
62 s_vulkanInstance->setApiVersion(QVersionNumber(1, 2));
63 else if (supportedVersion >= QVersionNumber(1, 1))
64 s_vulkanInstance->setApiVersion(QVersionNumber(1, 1));
65 qCDebug(lcGuiVk) <<
"QVulkanDefaultInstance: Creating Vulkan instance"
66 <<
"Requesting Vulkan API" << s_vulkanInstance->apiVersion()
67 <<
"Instance-level version was reported as" << supportedVersion;
69 if (s_vulkanInstanceFlags.testFlag(EnableValidation))
70 s_vulkanInstance->setLayers({
"VK_LAYER_KHRONOS_validation" });
72 s_vulkanInstance->setExtensions(QRhiVulkanInitParams::preferredInstanceExtensions());
74 if (!s_vulkanInstance->create()) {
75 qWarning(
"QVulkanDefaultInstance: Failed to create Vulkan instance");
76 delete s_vulkanInstance;
77 s_vulkanInstance =
nullptr;
80 return s_vulkanInstance;
83void QVulkanDefaultInstance::cleanup()
85 delete s_vulkanInstance;
86 s_vulkanInstance =
nullptr;