aboutsummaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorvaxerski <[email protected]>2023-02-14 17:08:42 +0000
committervaxerski <[email protected]>2023-02-14 17:08:42 +0000
commit127e80692f78b0d91450194fcb4ce0009c2a98a4 (patch)
treed5e730053d9daeb7639f4dfe019b730e05ffdac5
parent98c95aa34d31bcbb792227d00dc37bfd627a564a (diff)
downloadHyprland-127e80692f78b0d91450194fcb4ce0009c2a98a4.tar.gz
Hyprland-127e80692f78b0d91450194fcb4ce0009c2a98a4.zip
move no_vfr to vfr and add vrr
-rw-r--r--src/Compositor.cpp2
-rw-r--r--src/config/ConfigManager.cpp67
-rw-r--r--src/events/Monitors.cpp8
3 files changed, 53 insertions, 24 deletions
diff --git a/src/Compositor.cpp b/src/Compositor.cpp
index e9dad892..10a771c9 100644
--- a/src/Compositor.cpp
+++ b/src/Compositor.cpp
@@ -1957,6 +1957,8 @@ void CCompositor::setWindowFullscreen(CWindow* pWindow, bool on, eFullscreenMode
// DMAbuf stuff for direct scanout
g_pHyprRenderer->setWindowScanoutMode(pWindow);
+
+ g_pConfigManager->ensureVRR(PMONITOR);
}
void CCompositor::moveUnmanagedX11ToWindows(CWindow* pWindow) {
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
index 77c91d29..573a51c0 100644
--- a/src/config/ConfigManager.cpp
+++ b/src/config/ConfigManager.cpp
@@ -51,7 +51,8 @@ void CConfigManager::setDefaultVars() {
configValues["misc:disable_hyprland_logo"].intValue = 0;
configValues["misc:disable_splash_rendering"].intValue = 0;
- configValues["misc:no_vfr"].intValue = 1;
+ configValues["misc:vfr"].intValue = 1;
+ configValues["misc:vrr"].intValue = 0;
configValues["misc:mouse_move_enables_dpms"].intValue = 0;
configValues["misc:always_follow_on_dnd"].intValue = 1;
configValues["misc:layers_hog_keyboard_focus"].intValue = 1;
@@ -1692,35 +1693,61 @@ void CConfigManager::ensureDPMS() {
}
void CConfigManager::ensureVRR(CMonitor* pMonitor) {
- static auto* const PNOVRR = &getConfigValuePtr("misc:no_vfr")->intValue;
+ static auto* const PVRR = &getConfigValuePtr("misc:vrr")->intValue;
- auto ensureVRRForDisplay = [&](CMonitor* m) -> void {
- if (!*PNOVRR && !m->vrrActive) {
- // Adaptive sync (VRR)
- wlr_output_enable_adaptive_sync(m->output, 1);
-
- if (!wlr_output_test(m->output)) {
- Debug::log(LOG, "Pending output %s does not accept VRR.", m->output->name);
+ static auto ensureVRRForDisplay = [&](CMonitor* m) -> void {
+ if (*PVRR == 0) {
+ if (m->vrrActive) {
wlr_output_enable_adaptive_sync(m->output, 0);
- }
- if (!wlr_output_commit(m->output)) {
- Debug::log(ERR, "Couldn't commit output %s in ensureVRR -> true", m->output->name);
+ if (!wlr_output_commit(m->output)) {
+ Debug::log(ERR, "Couldn't commit output %s in ensureVRR -> false", m->output->name);
+ }
}
+ m->vrrActive = false;
+ return;
+ } else if (*PVRR == 1) {
+ if (!m->vrrActive) {
+ wlr_output_enable_adaptive_sync(m->output, 1);
+ if (!wlr_output_test(m->output)) {
+ Debug::log(LOG, "Pending output %s does not accept VRR.", m->output->name);
+ wlr_output_enable_adaptive_sync(m->output, 0);
+ }
+
+ if (!wlr_output_commit(m->output)) {
+ Debug::log(ERR, "Couldn't commit output %s in ensureVRR -> true", m->output->name);
+ }
+ }
+ m->vrrActive = true;
+ return;
+ } else if (*PVRR == 2) {
+ /* fullscreen */
m->vrrActive = true;
- Debug::log(LOG, "VRR ensured on %s -> true", m->output->name);
- } else if (*PNOVRR && m->vrrActive) {
- wlr_output_enable_adaptive_sync(m->output, 0);
+ const auto PWORKSPACE = g_pCompositor->getWorkspaceByID(m->activeWorkspace);
- if (!wlr_output_commit(m->output)) {
- Debug::log(ERR, "Couldn't commit output %s in ensureVRR -> false", m->output->name);
- }
+ if (!PWORKSPACE)
+ return; // ???
- m->vrrActive = false;
+ if (PWORKSPACE->m_bHasFullscreenWindow && m->output->adaptive_sync_status == WLR_OUTPUT_ADAPTIVE_SYNC_DISABLED) {
+ wlr_output_enable_adaptive_sync(m->output, 1);
+
+ if (!wlr_output_test(m->output)) {
+ Debug::log(LOG, "Pending output %s does not accept VRR.", m->output->name);
+ wlr_output_enable_adaptive_sync(m->output, 0);
+ }
- Debug::log(LOG, "VRR ensured on %s -> false", m->output->name);
+ if (!wlr_output_commit(m->output)) {
+ Debug::log(ERR, "Couldn't commit output %s in ensureVRR -> true", m->output->name);
+ }
+ } else if (!PWORKSPACE->m_bHasFullscreenWindow && m->output->adaptive_sync_status == WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED) {
+ wlr_output_enable_adaptive_sync(m->output, 0);
+
+ if (!wlr_output_commit(m->output)) {
+ Debug::log(ERR, "Couldn't commit output %s in ensureVRR -> false", m->output->name);
+ }
+ }
}
};
diff --git a/src/events/Monitors.cpp b/src/events/Monitors.cpp
index ee7734df..11a83073 100644
--- a/src/events/Monitors.cpp
+++ b/src/events/Monitors.cpp
@@ -120,6 +120,7 @@ void Events::listener_monitorFrame(void* owner, void* data) {
static auto* const PDAMAGETRACKINGMODE = &g_pConfigManager->getConfigValuePtr("debug:damage_tracking")->intValue;
static auto* const PDAMAGEBLINK = &g_pConfigManager->getConfigValuePtr("debug:damage_blink")->intValue;
static auto* const PNODIRECTSCANOUT = &g_pConfigManager->getConfigValuePtr("misc:no_direct_scanout")->intValue;
+ static auto* const PVFR = &g_pConfigManager->getConfigValuePtr("misc:vfr")->intValue;
static int damageBlinkCleanup = 0; // because double-buffered
@@ -148,8 +149,7 @@ void Events::listener_monitorFrame(void* owner, void* data) {
// checks //
if (PMONITOR->ID == g_pHyprRenderer->m_pMostHzMonitor->ID ||
- g_pHyprRenderer->m_pMostHzMonitor->output->adaptive_sync_status ==
- WLR_OUTPUT_ADAPTIVE_SYNC_ENABLED) { // unfortunately with VFR we don't have the guarantee mostHz is going to be updated all the time, so we have to ignore that
+ *PVFR == 1) { // unfortunately with VFR we don't have the guarantee mostHz is going to be updated all the time, so we have to ignore that
g_pCompositor->sanityCheckWorkspaces();
g_pAnimationManager->tick();
@@ -204,7 +204,7 @@ void Events::listener_monitorFrame(void* owner, void* data) {
pixman_region32_fini(&damage);
wlr_output_rollback(PMONITOR->output);
- if (*PDAMAGEBLINK || PMONITOR->output->adaptive_sync_status == WLR_OUTPUT_ADAPTIVE_SYNC_DISABLED)
+ if (*PDAMAGEBLINK || *PVFR == 0)
g_pCompositor->scheduleFrameForMonitor(PMONITOR);
return;
@@ -311,7 +311,7 @@ void Events::listener_monitorFrame(void* owner, void* data) {
if (!wlr_output_commit(PMONITOR->output))
return;
- if (*PDAMAGEBLINK || PMONITOR->output->adaptive_sync_status == WLR_OUTPUT_ADAPTIVE_SYNC_DISABLED)
+ if (*PDAMAGEBLINK || *PVFR == 0)
g_pCompositor->scheduleFrameForMonitor(PMONITOR);
if (*PDEBUGOVERLAY == 1) {