backends/drm: wait for pending pageflips before turning outputs off

This commit is contained in:
Xaver Hugl 2023-07-31 14:26:25 +02:00
parent db2944076a
commit 2fff5891a5
2 changed files with 4 additions and 1 deletions

View file

@ -112,6 +112,7 @@ public:
FileDescriptor createNonMasterFd() const;
std::unique_ptr<DrmLease> leaseOutputs(const QVector<DrmOutput *> &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<DrmConnector *> connectors, const QVector<DrmCrtc *> &crtcs);
DrmPipeline::Error testPipelines();

View file

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