summaryrefslogtreecommitdiffstats
path: root/src/gui/vulkan/qbasicvulkanplatforminstance.cpp
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2021-01-14 17:42:47 +0100
committerLaszlo Agocs <laszlo.agocs@qt.io>2021-01-18 13:21:15 +0100
commit7d378bd7804343652fdf1e28744523382280e90e (patch)
treec508cc9f518ca58eabbfa70e1437c8f32638243f /src/gui/vulkan/qbasicvulkanplatforminstance.cpp
parent957344123672e891a25e55b54dcb012d2017b27a (diff)
vulkan: Add instance-level version getter
...as described in the Vulkan >= 1.1 spec. One can now call supportedApiVersion() (before create(), similarly to the other supported* functions) to determine the available Vulkan (instance-level) version. Fixes: QTBUG-90333 Change-Id: Ibe8482402b7f07e4abc48c88252ff0365e4e2faa Reviewed-by: Andy Nichols <andy.nichols@qt.io>
Diffstat (limited to 'src/gui/vulkan/qbasicvulkanplatforminstance.cpp')
-rw-r--r--src/gui/vulkan/qbasicvulkanplatforminstance.cpp24
1 files changed, 24 insertions, 0 deletions
diff --git a/src/gui/vulkan/qbasicvulkanplatforminstance.cpp b/src/gui/vulkan/qbasicvulkanplatforminstance.cpp
index 01d6179166..abb17e9d6d 100644
--- a/src/gui/vulkan/qbasicvulkanplatforminstance.cpp
+++ b/src/gui/vulkan/qbasicvulkanplatforminstance.cpp
@@ -135,6 +135,25 @@ void QBasicPlatformVulkanInstance::init(QLibrary *lib)
return;
}
+ // Do not rely on non-1.0 header typedefs here.
+ typedef VkResult (VKAPI_PTR *T_enumerateInstanceVersion)(uint32_t* pApiVersion);
+ // Determine instance-level version as described in the Vulkan 1.2 spec.
+ T_enumerateInstanceVersion enumerateInstanceVersion = reinterpret_cast<T_enumerateInstanceVersion>(
+ m_vkGetInstanceProcAddr(VK_NULL_HANDLE, "vkEnumerateInstanceVersion"));
+ if (enumerateInstanceVersion) {
+ uint32_t ver = 0;
+ if (enumerateInstanceVersion(&ver) == VK_SUCCESS) {
+ m_supportedApiVersion = QVersionNumber(VK_VERSION_MAJOR(ver),
+ VK_VERSION_MINOR(ver),
+ VK_VERSION_PATCH(ver));
+ } else {
+ m_supportedApiVersion = QVersionNumber(1, 0, 0);
+ }
+ } else {
+ // Vulkan 1.0
+ m_supportedApiVersion = QVersionNumber(1, 0, 0);
+ }
+
uint32_t layerCount = 0;
m_vkEnumerateInstanceLayerProperties(&layerCount, nullptr);
if (layerCount) {
@@ -180,6 +199,11 @@ QVulkanInfoVector<QVulkanExtension> QBasicPlatformVulkanInstance::supportedExten
return m_supportedExtensions;
}
+QVersionNumber QBasicPlatformVulkanInstance::supportedApiVersion() const
+{
+ return m_supportedApiVersion;
+}
+
void QBasicPlatformVulkanInstance::initInstance(QVulkanInstance *instance, const QByteArrayList &extraExts)
{
if (!m_vkGetInstanceProcAddr) {