summaryrefslogtreecommitdiff
path: root/src/helpers/Monitor.cpp
diff options
context:
space:
mode:
authorfazzi <18248986+fxzzi@users.noreply.github.com>2026-04-26 19:21:13 +0100
committerGitHub <noreply@github.com>2026-04-26 19:21:13 +0100
commit84d45bd13acce0b16c8f86e83144f22b18d9398e (patch)
tree53f4eba913bdc04f4158a586fc5d9ef010ba620b /src/helpers/Monitor.cpp
parentd669ea7db20bad576f13f2b0f7aca038d95536e1 (diff)
monitor: set format back after failing DS activation (#14168)
we do run m_lastScanout.reset(), but m_lastScanout might sometimes not be set. cache format from before attempting DS, and set back to it on activation failure.
Diffstat (limited to 'src/helpers/Monitor.cpp')
-rw-r--r--src/helpers/Monitor.cpp11
1 files changed, 10 insertions, 1 deletions
diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp
index 44e06765..37606d4f 100644
--- a/src/helpers/Monitor.cpp
+++ b/src/helpers/Monitor.cpp
@@ -1991,7 +1991,8 @@ bool CMonitor::attemptDirectScanout() {
if (m_lastScanout.expired())
m_prevDrmFormat = m_drmFormat;
- const bool NEEDS_TEST = !m_lastScanout || m_drmFormat != params.format; // do not retest while it's active
+ const auto PREV_FORMAT = m_drmFormat;
+ const bool NEEDS_TEST = !m_lastScanout || m_drmFormat != params.format; // do not retest while it's active
if (m_drmFormat != params.format) {
m_output->state->setFormat(params.format);
m_drmFormat = params.format;
@@ -2004,6 +2005,10 @@ bool CMonitor::attemptDirectScanout() {
if (NEEDS_TEST && !m_state.test()) {
Log::logger->log(Log::TRACE, "attemptDirectScanout: failed basic test");
+ if (m_drmFormat != PREV_FORMAT) {
+ m_output->state->setFormat(PREV_FORMAT);
+ m_drmFormat = PREV_FORMAT;
+ }
return false;
}
@@ -2029,6 +2034,10 @@ bool CMonitor::attemptDirectScanout() {
if (!ok) {
Log::logger->log(Log::TRACE, "attemptDirectScanout: failed to scanout surface");
+ if (m_drmFormat != PREV_FORMAT) {
+ m_output->state->setFormat(PREV_FORMAT);
+ m_drmFormat = PREV_FORMAT;
+ }
m_lastScanout.reset();
return false;
}