From 4c42269ce6c44af40ea63f048d67dc0b898c8213 Mon Sep 17 00:00:00 2001 From: Pppp1116 Date: Fri, 3 Apr 2026 13:26:49 +0100 Subject: monitor: centralize solitary and scanout eligibility checks --- src/render/Renderer.cpp | 27 +++++++++++++++------------ 1 file changed, 15 insertions(+), 12 deletions(-) (limited to 'src/render/Renderer.cpp') diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index a9643df0..b6f4acb7 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -1901,21 +1901,24 @@ void IHyprRenderer::renderMonitor(PHLMONITOR pMonitor, bool commit) { return; // tearing and DS first - bool shouldTear = pMonitor->updateTearing(); + bool shouldTear = pMonitor->updateTearing(); + const bool canAttemptDirectScanout = pMonitor->canAttemptDirectScanoutFast(); - if (pMonitor->attemptDirectScanout()) { - pMonitor->m_directScanoutIsActive = true; - return; - } else if (!pMonitor->m_lastScanout.expired() || pMonitor->m_directScanoutIsActive) { - Log::logger->log(Log::DEBUG, "Left a direct scanout."); - pMonitor->m_lastScanout.reset(); - pMonitor->m_directScanoutIsActive = false; + if (canAttemptDirectScanout) { + if (pMonitor->attemptDirectScanout()) { + pMonitor->m_directScanoutIsActive = true; + return; + } else if (!pMonitor->m_lastScanout.expired() || pMonitor->m_directScanoutIsActive) { + Log::logger->log(Log::DEBUG, "Left a direct scanout."); + pMonitor->m_lastScanout.reset(); + pMonitor->m_directScanoutIsActive = false; - // reset DRM format, but only if needed since it might modeset - if (pMonitor->m_output->state->state().drmFormat != pMonitor->m_prevDrmFormat) - pMonitor->m_output->state->setFormat(pMonitor->m_prevDrmFormat); + // reset DRM format, but only if needed since it might modeset + if (pMonitor->m_output->state->state().drmFormat != pMonitor->m_prevDrmFormat) + pMonitor->m_output->state->setFormat(pMonitor->m_prevDrmFormat); - pMonitor->m_drmFormat = pMonitor->m_prevDrmFormat; + pMonitor->m_drmFormat = pMonitor->m_prevDrmFormat; + } } Event::bus()->m_events.render.pre.emit(pMonitor); -- cgit v1.2.3