diff options
Diffstat (limited to 'src/gui/vulkan')
-rw-r--r-- | src/gui/vulkan/qbasicvulkanplatforminstance.cpp | 21 | ||||
-rw-r--r-- | src/gui/vulkan/qt_attribution.json | 2 | ||||
-rw-r--r-- | src/gui/vulkan/qvulkandefaultinstance.cpp | 2 | ||||
-rw-r--r-- | src/gui/vulkan/qvulkaninstance.cpp | 14 | ||||
-rw-r--r-- | src/gui/vulkan/qvulkanwindow.cpp | 18 |
5 files changed, 33 insertions, 24 deletions
diff --git a/src/gui/vulkan/qbasicvulkanplatforminstance.cpp b/src/gui/vulkan/qbasicvulkanplatforminstance.cpp index 6825da8069..4baa434b7f 100644 --- a/src/gui/vulkan/qbasicvulkanplatforminstance.cpp +++ b/src/gui/vulkan/qbasicvulkanplatforminstance.cpp @@ -150,7 +150,7 @@ void QBasicPlatformVulkanInstance::init(QLibrary *lib) QList<VkLayerProperties> layerProps(layerCount); m_vkEnumerateInstanceLayerProperties(&layerCount, layerProps.data()); m_supportedLayers.reserve(layerCount); - for (const VkLayerProperties &p : qAsConst(layerProps)) { + for (const VkLayerProperties &p : std::as_const(layerProps)) { QVulkanLayer layer; layer.name = p.layerName; layer.version = p.implementationVersion; @@ -169,7 +169,7 @@ void QBasicPlatformVulkanInstance::init(QLibrary *lib) QList<VkExtensionProperties> extProps(extCount); m_vkEnumerateInstanceExtensionProperties(nullptr, &extCount, extProps.data()); m_supportedExtensions.reserve(extCount); - for (const VkExtensionProperties &p : qAsConst(extProps)) { + for (const VkExtensionProperties &p : std::as_const(extProps)) { QVulkanExtension ext; ext.name = p.extensionName; ext.version = p.specVersion; @@ -220,11 +220,11 @@ void QBasicPlatformVulkanInstance::initInstance(QVulkanInstance *instance, const apiVersion.microVersion()); } + m_enabledExtensions.append("VK_KHR_surface"); + m_enabledExtensions.append("VK_KHR_portability_enumeration"); if (!flags.testFlag(QVulkanInstance::NoDebugOutputRedirect)) m_enabledExtensions.append("VK_EXT_debug_report"); - m_enabledExtensions.append("VK_KHR_surface"); - for (const QByteArray &ext : extraExts) m_enabledExtensions.append(ext); @@ -246,13 +246,13 @@ void QBasicPlatformVulkanInstance::initInstance(QVulkanInstance *instance, const // No clever stuff with QSet and friends: the order for layers matters // and the user-provided order must be kept. - for (int i = 0; i < m_enabledLayers.count(); ++i) { + for (int i = 0; i < m_enabledLayers.size(); ++i) { const QByteArray &layerName(m_enabledLayers[i]); if (!m_supportedLayers.contains(layerName)) m_enabledLayers.removeAt(i--); } qDebug(lcPlatVk) << "Enabling Vulkan instance layers:" << m_enabledLayers; - for (int i = 0; i < m_enabledExtensions.count(); ++i) { + for (int i = 0; i < m_enabledExtensions.size(); ++i) { const QByteArray &extName(m_enabledExtensions[i]); if (!m_supportedExtensions.contains(extName)) m_enabledExtensions.removeAt(i--); @@ -263,20 +263,21 @@ void QBasicPlatformVulkanInstance::initInstance(QVulkanInstance *instance, const memset(&instInfo, 0, sizeof(instInfo)); instInfo.sType = VK_STRUCTURE_TYPE_INSTANCE_CREATE_INFO; instInfo.pApplicationInfo = &appInfo; + instInfo.flags = 0x00000001; // VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR QList<const char *> layerNameVec; - for (const QByteArray &ba : qAsConst(m_enabledLayers)) + for (const QByteArray &ba : std::as_const(m_enabledLayers)) layerNameVec.append(ba.constData()); if (!layerNameVec.isEmpty()) { - instInfo.enabledLayerCount = layerNameVec.count(); + instInfo.enabledLayerCount = layerNameVec.size(); instInfo.ppEnabledLayerNames = layerNameVec.constData(); } QList<const char *> extNameVec; - for (const QByteArray &ba : qAsConst(m_enabledExtensions)) + for (const QByteArray &ba : std::as_const(m_enabledExtensions)) extNameVec.append(ba.constData()); if (!extNameVec.isEmpty()) { - instInfo.enabledExtensionCount = extNameVec.count(); + instInfo.enabledExtensionCount = extNameVec.size(); instInfo.ppEnabledExtensionNames = extNameVec.constData(); } diff --git a/src/gui/vulkan/qt_attribution.json b/src/gui/vulkan/qt_attribution.json index b46131abf8..b920865e5c 100644 --- a/src/gui/vulkan/qt_attribution.json +++ b/src/gui/vulkan/qt_attribution.json @@ -5,7 +5,7 @@ "QDocModule": "qtgui", "Description": "Vulkan XML API Registry.", "QtUsage": "Used to dynamically generate the sources for the QVulkan(Device)Functions classes.", - "Path": "vk.xml", + "Files": "vk.xml", "Homepage": "https://www.khronos.org/", "Version": "1.2.166", diff --git a/src/gui/vulkan/qvulkandefaultinstance.cpp b/src/gui/vulkan/qvulkandefaultinstance.cpp index c106857691..c12fde9464 100644 --- a/src/gui/vulkan/qvulkandefaultinstance.cpp +++ b/src/gui/vulkan/qvulkandefaultinstance.cpp @@ -55,7 +55,7 @@ QVulkanInstance *QVulkanDefaultInstance::instance() if (supportedVersion >= QVersionNumber(1, 2)) s_vulkanInstance->setApiVersion(QVersionNumber(1, 2)); else if (supportedVersion >= QVersionNumber(1, 1)) - s_vulkanInstance->setApiVersion(QVersionNumber(1, 2)); + s_vulkanInstance->setApiVersion(QVersionNumber(1, 1)); qCDebug(lcGuiVk) << "QVulkanDefaultInstance: Creating Vulkan instance" << "Requesting Vulkan API" << s_vulkanInstance->apiVersion() << "Instance-level version was reported as" << supportedVersion; diff --git a/src/gui/vulkan/qvulkaninstance.cpp b/src/gui/vulkan/qvulkaninstance.cpp index bfc4b38b5a..8a0f691c37 100644 --- a/src/gui/vulkan/qvulkaninstance.cpp +++ b/src/gui/vulkan/qvulkaninstance.cpp @@ -478,9 +478,13 @@ void QVulkanInstance::setLayers(const QByteArrayList &layers) /*! Specifies the list of additional instance \a extensions to enable. It is safe to specify unsupported extensions as well because these get ignored - when not supported at run time. The surface-related extensions required by - Qt will always be added automatically, no need to include them in this - list. + when not supported at run time. + + \note The surface-related extensions required by Qt (for example, \c + VK_KHR_win32_surface) will always be added automatically, no need to + include them in this list. + + \note \c VK_KHR_portability_enumeration is added automatically. \note This function can only be called before create() and has no effect if called afterwards. @@ -538,6 +542,10 @@ void QVulkanInstance::setApiVersion(const QVersionNumber &vulkanVersion) The Vulkan instance and library is available as long as this QVulkanInstance exists, or until destroy() is called. + + The VkInstance is always created with the flag + \l{https://registry.khronos.org/vulkan/specs/1.3-extensions/man/html/VkInstanceCreateFlagBits.html}{VK_INSTANCE_CREATE_ENUMERATE_PORTABILITY_BIT_KHR} + set. This means that Vulkan Portability physical devices get enumerated as well. */ bool QVulkanInstance::create() { diff --git a/src/gui/vulkan/qvulkanwindow.cpp b/src/gui/vulkan/qvulkanwindow.cpp index 29d6d0d5bd..5a86b43290 100644 --- a/src/gui/vulkan/qvulkanwindow.cpp +++ b/src/gui/vulkan/qvulkanwindow.cpp @@ -335,7 +335,7 @@ void QVulkanWindow::setPhysicalDeviceIndex(int idx) qWarning("QVulkanWindow: Attempted to set physical device when already initialized"); return; } - const int count = availablePhysicalDevices().count(); + const int count = availablePhysicalDevices().size(); if (idx < 0 || idx >= count) { qWarning("QVulkanWindow: Invalid physical device index %d (total physical devices: %d)", idx, count); return; @@ -581,7 +581,7 @@ void QVulkanWindowPrivate::init() return; } - if (physDevIndex < 0 || physDevIndex >= physDevs.count()) { + if (physDevIndex < 0 || physDevIndex >= physDevs.size()) { qWarning("QVulkanWindow: Invalid physical device index; defaulting to 0"); physDevIndex = 0; } @@ -600,7 +600,7 @@ void QVulkanWindowPrivate::init() f->vkGetPhysicalDeviceQueueFamilyProperties(physDev, &queueCount, queueFamilyProps.data()); gfxQueueFamilyIdx = uint32_t(-1); presQueueFamilyIdx = uint32_t(-1); - for (int i = 0; i < queueFamilyProps.count(); ++i) { + for (int i = 0; i < queueFamilyProps.size(); ++i) { const bool supportsPresent = inst->supportsPresent(physDev, i, q); qCDebug(lcGuiVk, "queue family %d: flags=0x%x count=%d supportsPresent=%d", i, queueFamilyProps[i].queueFlags, queueFamilyProps[i].queueCount, supportsPresent); @@ -613,7 +613,7 @@ void QVulkanWindowPrivate::init() presQueueFamilyIdx = gfxQueueFamilyIdx; } else { qCDebug(lcGuiVk, "No queue with graphics+present; trying separate queues"); - for (int i = 0; i < queueFamilyProps.count(); ++i) { + for (int i = 0; i < queueFamilyProps.size(); ++i) { if (gfxQueueFamilyIdx == uint32_t(-1) && (queueFamilyProps[i].queueFlags & VK_QUEUE_GRAPHICS_BIT)) gfxQueueFamilyIdx = i; if (presQueueFamilyIdx == uint32_t(-1) && inst->supportsPresent(physDev, i, q)) @@ -657,7 +657,7 @@ void QVulkanWindowPrivate::init() queueCreateInfoModifier(queueFamilyProps.constData(), queueCount, queueInfo); bool foundGfxQueue = false; bool foundPresQueue = false; - for (const VkDeviceQueueCreateInfo& createInfo : qAsConst(queueInfo)) { + for (const VkDeviceQueueCreateInfo& createInfo : std::as_const(queueInfo)) { foundGfxQueue |= createInfo.queueFamilyIndex == gfxQueueFamilyIdx; foundPresQueue |= createInfo.queueFamilyIndex == presQueueFamilyIdx; } @@ -699,7 +699,7 @@ void QVulkanWindowPrivate::init() devInfo.sType = VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO; devInfo.queueCreateInfoCount = queueInfo.size(); devInfo.pQueueCreateInfos = queueInfo.constData(); - devInfo.enabledExtensionCount = devExts.count(); + devInfo.enabledExtensionCount = devExts.size(); devInfo.ppEnabledExtensionNames = devExts.constData(); VkPhysicalDeviceFeatures features; @@ -857,7 +857,7 @@ void QVulkanWindowPrivate::init() // Try to honor the user request. if (!formats.isEmpty() && !requestedColorFormats.isEmpty()) { - for (VkFormat reqFmt : qAsConst(requestedColorFormats)) { + for (VkFormat reqFmt : std::as_const(requestedColorFormats)) { auto r = std::find_if(formats.cbegin(), formats.cend(), [reqFmt](const VkSurfaceFormatKHR &sfmt) { return sfmt.format == reqFmt; }); if (r != formats.cend()) { @@ -2273,7 +2273,7 @@ void QVulkanWindowPrivate::finishBlockingReadback() VkPhysicalDevice QVulkanWindow::physicalDevice() const { Q_D(const QVulkanWindow); - if (d->physDevIndex < d->physDevs.count()) + if (d->physDevIndex < d->physDevs.size()) return d->physDevs[d->physDevIndex]; qWarning("QVulkanWindow: Physical device not available"); return VK_NULL_HANDLE; @@ -2289,7 +2289,7 @@ VkPhysicalDevice QVulkanWindow::physicalDevice() const const VkPhysicalDeviceProperties *QVulkanWindow::physicalDeviceProperties() const { Q_D(const QVulkanWindow); - if (d->physDevIndex < d->physDevProps.count()) + if (d->physDevIndex < d->physDevProps.size()) return &d->physDevProps[d->physDevIndex]; qWarning("QVulkanWindow: Physical device properties not available"); return nullptr; |