summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp27
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);