diff options
author | Laszlo Agocs <laszlo.agocs@qt.io> | 2021-01-14 17:42:47 +0100 |
---|---|---|
committer | Laszlo Agocs <laszlo.agocs@qt.io> | 2021-01-18 13:21:15 +0100 |
commit | 7d378bd7804343652fdf1e28744523382280e90e (patch) | |
tree | c508cc9f518ca58eabbfa70e1437c8f32638243f /src/gui/vulkan/qbasicvulkanplatforminstance.cpp | |
parent | 957344123672e891a25e55b54dcb012d2017b27a (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.cpp | 24 |
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) { |