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();