diff --git a/src/plugins/platforms/wayland/qwaylandvulkaninstance.cpp b/src/plugins/platforms/wayland/qwaylandvulkaninstance.cpp index 5edbd4757d6..51802257490 100644 --- a/src/plugins/platforms/wayland/qwaylandvulkaninstance.cpp +++ b/src/plugins/platforms/wayland/qwaylandvulkaninstance.cpp @@ -124,6 +124,16 @@ void QWaylandVulkanInstance::presentAboutToBeQueued(QWindow *window) qWarning() << "Attempted to call presentAboutToBeQueued() without a valid platform window"; return; } + + bool ok; + int frameCallbackTimeout = qEnvironmentVariableIntValue("QT_WAYLAND_FRAME_CALLBACK_TIMEOUT", &ok); + + if (ok) + mFrameCallbackTimeout = frameCallbackTimeout; + + if (w->format().swapInterval() > 0) + w->waitForFrameSync(mFrameCallbackTimeout); + w->handleUpdate(); } diff --git a/src/plugins/platforms/wayland/qwaylandvulkaninstance_p.h b/src/plugins/platforms/wayland/qwaylandvulkaninstance_p.h index 08246c4dcc7..f46ba3f7569 100644 --- a/src/plugins/platforms/wayland/qwaylandvulkaninstance_p.h +++ b/src/plugins/platforms/wayland/qwaylandvulkaninstance_p.h @@ -82,6 +82,7 @@ private: QVulkanInstance *m_instance = nullptr; PFN_vkGetPhysicalDeviceWaylandPresentationSupportKHR m_getPhysDevPresSupport = nullptr; PFN_vkCreateWaylandSurfaceKHR m_createSurface = nullptr; + int mFrameCallbackTimeout = 100; }; } // namespace QtWaylandClient