summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorLaszlo Agocs <laszlo.agocs@qt.io>2022-08-02 11:49:25 +0200
committerLaszlo Agocs <laszlo.agocs@qt.io>2022-08-05 11:41:34 +0200
commit9123c6a6c4ab9cdc85aeec145d9aba962dab0270 (patch)
tree5a8b36d6f88c300d0bd2234cabe916b5f8dc5fd8
parent614ab3a4bdcfe77cb48fa9be5a915c526cdc07a9 (diff)
Sync Vulkan device features between QVulkanWindow and QRhi
Enable all 1.0 core features that are reported as supported. This has been recently added for QVulkanWindow, but not for QRhi's Vulkan backend. Synchronize the behavior between the two. In addition, explicitly turn off robustBufferAccess in both places. This is a feature that may affect performance by nature, and so we cannot just blindly enable it. Amends 7888d846ebd337d586971aa92bbd21cd227c2bc5 Task-number: QTBUG-105158 Change-Id: Icd7d1800a24a39a2bc427966022185885fa92d55 Reviewed-by: Qt CI Bot <qt_ci_bot@qt-project.org> Reviewed-by: Andy Nichols <andy.nichols@qt.io>
-rw-r--r--src/gui/rhi/qrhivulkan.cpp8
-rw-r--r--src/gui/vulkan/qvulkanwindow.cpp4
2 files changed, 11 insertions, 1 deletions
diff --git a/src/gui/rhi/qrhivulkan.cpp b/src/gui/rhi/qrhivulkan.cpp
index 26c153afff..57998119e0 100644
--- a/src/gui/rhi/qrhivulkan.cpp
+++ b/src/gui/rhi/qrhivulkan.cpp
@@ -540,6 +540,14 @@ bool QRhiVulkan::create(QRhi::Flags flags)
devInfo.enabledExtensionCount = uint32_t(requestedDevExts.count());
devInfo.ppEnabledExtensionNames = requestedDevExts.constData();
+ // Enable all supported 1.0 core features, except ones that likely
+ // involve a performance penalty.
+ VkPhysicalDeviceFeatures features;
+ memset(&features, 0, sizeof(features));
+ f->vkGetPhysicalDeviceFeatures(physDev, &features);
+ features.robustBufferAccess = VK_FALSE;
+ devInfo.pEnabledFeatures = &features;
+
err = f->vkCreateDevice(physDev, &devInfo, nullptr, &dev);
if (err != VK_SUCCESS) {
qWarning("Failed to create device: %d", err);
diff --git a/src/gui/vulkan/qvulkanwindow.cpp b/src/gui/vulkan/qvulkanwindow.cpp
index 201f727707..2739e12a15 100644
--- a/src/gui/vulkan/qvulkanwindow.cpp
+++ b/src/gui/vulkan/qvulkanwindow.cpp
@@ -729,10 +729,12 @@ void QVulkanWindowPrivate::init()
devInfo.enabledExtensionCount = devExts.count();
devInfo.ppEnabledExtensionNames = devExts.constData();
- // Enable all 1.0 features.
+ // Enable all supported 1.0 core features, except ones that likely
+ // involve a performance penalty.
VkPhysicalDeviceFeatures features;
memset(&features, 0, sizeof(features));
f->vkGetPhysicalDeviceFeatures(physDev, &features);
+ features.robustBufferAccess = VK_FALSE;
devInfo.pEnabledFeatures = &features;
// Device layers are not supported by QVulkanWindow since that's an already deprecated