From 2fff5891a51ed5b2a62a5f36865298f495ce780e Mon Sep 17 00:00:00 2001 From: Xaver Hugl Date: Mon, 31 Jul 2023 14:26:25 +0200 Subject: [PATCH] backends/drm: wait for pending pageflips before turning outputs off --- src/backends/drm/drm_gpu.h | 2 +- src/backends/drm/drm_output.cpp | 3 +++ 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/src/backends/drm/drm_gpu.h b/src/backends/drm/drm_gpu.h index 9bdf23639a..2e89d5d929 100644 --- a/src/backends/drm/drm_gpu.h +++ b/src/backends/drm/drm_gpu.h @@ -112,6 +112,7 @@ public: FileDescriptor createNonMasterFd() const; std::unique_ptr leaseOutputs(const QVector &outputs); + void waitIdle(); Q_SIGNALS: void activeChanged(bool active); @@ -123,7 +124,6 @@ private: DrmOutput *findOutput(quint32 connector); void removeOutput(DrmOutput *output); void initDrmResources(); - void waitIdle(); DrmPipeline::Error checkCrtcAssignment(QVector connectors, const QVector &crtcs); DrmPipeline::Error testPipelines(); diff --git a/src/backends/drm/drm_output.cpp b/src/backends/drm/drm_output.cpp index 747ea49e4a..7630a4dad6 100644 --- a/src/backends/drm/drm_output.cpp +++ b/src/backends/drm/drm_output.cpp @@ -272,6 +272,9 @@ bool DrmOutput::setDrmDpmsMode(DpmsMode mode) updateDpmsMode(mode); return true; } + if (!active) { + gpu()->waitIdle(); + } m_pipeline->setActive(active); if (DrmPipeline::commitPipelines({m_pipeline}, active ? DrmPipeline::CommitMode::TestAllowModeset : DrmPipeline::CommitMode::CommitModeset) == DrmPipeline::Error::None) { m_pipeline->applyPendingChanges();