From c7f0519fafbf334a8f5088a8a0fc385732a24036 Mon Sep 17 00:00:00 2001 From: UjinT34 <41110182+UjinT34@users.noreply.github.com> Date: Fri, 21 Mar 2025 16:33:07 +0300 Subject: core: fix DS and VRR automation (#9334) --- src/config/ConfigManager.cpp | 32 +++++++++++++++----------------- 1 file changed, 15 insertions(+), 17 deletions(-) (limited to 'src/config/ConfigManager.cpp') diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp index 90ec6305..35c5a502 100644 --- a/src/config/ConfigManager.cpp +++ b/src/config/ConfigManager.cpp @@ -49,6 +49,7 @@ #include using namespace Hyprutils::String; using namespace Hyprutils::Animation; +using enum NContentType::eContentType; //NOLINTNEXTLINE extern "C" char** environ; @@ -1652,37 +1653,34 @@ void CConfigManager::ensureVRR(PHLMONITOR pMonitor) { } m->vrrActive = true; return; - } else if (USEVRR == 2) { + } else if (USEVRR == 2 || USEVRR == 3) { const auto PWORKSPACE = m->activeWorkspace; if (!PWORKSPACE) return; // ??? - const auto WORKSPACEFULL = PWORKSPACE->m_bHasFullscreenWindow && (PWORKSPACE->m_efFullscreenMode & FSMODE_FULLSCREEN); + bool wantVRR = PWORKSPACE->m_bHasFullscreenWindow && (PWORKSPACE->m_efFullscreenMode & FSMODE_FULLSCREEN); + if (wantVRR && USEVRR == 3) { + const auto contentType = PWORKSPACE->getFullscreenWindow()->getContentType(); + wantVRR = contentType == CONTENT_TYPE_GAME || contentType == CONTENT_TYPE_VIDEO; + } - if (WORKSPACEFULL) { + if (wantVRR) { /* fullscreen */ m->vrrActive = true; - m->output->state->resetExplicitFences(); - m->output->state->setAdaptiveSync(true); + if (!m->output->state->state().adaptiveSync) { + m->output->state->setAdaptiveSync(true); - if (!m->state.test()) { - Debug::log(LOG, "Pending output {} does not accept VRR.", m->output->name); - m->output->state->setAdaptiveSync(false); + if (!m->state.test()) { + Debug::log(LOG, "Pending output {} does not accept VRR.", m->output->name); + m->output->state->setAdaptiveSync(false); + } } - - if (!m->state.commit()) - Debug::log(ERR, "Couldn't commit output {} in ensureVRR -> true", m->output->name); - - } else if (!WORKSPACEFULL) { + } else { m->vrrActive = false; - m->output->state->resetExplicitFences(); m->output->state->setAdaptiveSync(false); - - if (!m->state.commit()) - Debug::log(ERR, "Couldn't commit output {} in ensureVRR -> false", m->output->name); } } }; -- cgit v1.2.3