diff options
Diffstat (limited to 'src/render/Renderer.cpp')
| -rw-r--r-- | src/render/Renderer.cpp | 27 |
1 files changed, 15 insertions, 12 deletions
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); |
