diff options
| author | UjinT34 <41110182+UjinT34@users.noreply.github.com> | 2025-03-21 16:33:07 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-03-21 14:33:07 +0100 |
| commit | c7f0519fafbf334a8f5088a8a0fc385732a24036 (patch) | |
| tree | b431cf3bfca5772e53a7d00f4a773048ebe56585 /src/config/ConfigManager.cpp | |
| parent | 7ea4fbf0ba034d947339b3a94a10da022eca1988 (diff) | |
core: fix DS and VRR automation (#9334)
Diffstat (limited to 'src/config/ConfigManager.cpp')
| -rw-r--r-- | src/config/ConfigManager.cpp | 32 |
1 files changed, 15 insertions, 17 deletions
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 <memory> 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); } } }; |
