generated from wm-packages/hyprland
Add debian/patches/sync3.patch
This commit is contained in:
parent
2b6e113496
commit
d624dd4584
117
debian/patches/sync3.patch
vendored
Normal file
117
debian/patches/sync3.patch
vendored
Normal file
@ -0,0 +1,117 @@
|
||||
From 40df1f771c281d11c0b67569bd7a061a3c102994 Mon Sep 17 00:00:00 2001
|
||||
From: Tom Englund <tomenglund26@gmail.com>
|
||||
Date: Sat, 22 Feb 2025 20:36:03 +0100
|
||||
Subject: [PATCH 3/3] syncobj: remove early buffer release
|
||||
|
||||
remove early buffer release config that previously tried to workaround
|
||||
flickers while it was more of an syncobj issue, it also cant be used
|
||||
since the buffer really is used for release point syncing in the
|
||||
renderer later. and use std::move instead of std::exchange to avoid a
|
||||
local temporar copy being created inside std::exchange.
|
||||
---
|
||||
src/config/ConfigDescriptions.hpp | 6 ------
|
||||
src/config/ConfigManager.cpp | 1 -
|
||||
src/protocols/DRMSyncobj.cpp | 12 ++++++++----
|
||||
src/protocols/core/Compositor.cpp | 17 +++--------------
|
||||
4 files changed, 11 insertions(+), 25 deletions(-)
|
||||
|
||||
diff --git a/src/config/ConfigDescriptions.hpp b/src/config/ConfigDescriptions.hpp
|
||||
index 4e591fa8107..f7e647b2b2f 100644
|
||||
--- a/src/config/ConfigDescriptions.hpp
|
||||
+++ b/src/config/ConfigDescriptions.hpp
|
||||
@@ -1348,12 +1348,6 @@ inline static const std::vector<SConfigOptionDescription> CONFIG_OPTIONS = {
|
||||
.type = CONFIG_OPTION_INT,
|
||||
.data = SConfigOptionDescription::SRangeData{2, 0, 2},
|
||||
},
|
||||
- SConfigOptionDescription{
|
||||
- .value = "render:allow_early_buffer_release",
|
||||
- .description = "Allow early buffer release event. Fixes stuttering and missing frames for some apps. May cause graphical glitches and memory leaks in others",
|
||||
- .type = CONFIG_OPTION_BOOL,
|
||||
- .data = SConfigOptionDescription::SBoolData{true},
|
||||
- },
|
||||
|
||||
/*
|
||||
* cursor:
|
||||
diff --git a/src/config/ConfigManager.cpp b/src/config/ConfigManager.cpp
|
||||
index 9b547ffbb75..277098f5260 100644
|
||||
--- a/src/config/ConfigManager.cpp
|
||||
+++ b/src/config/ConfigManager.cpp
|
||||
@@ -664,7 +664,6 @@ CConfigManager::CConfigManager() {
|
||||
m_pConfig->addConfigValue("render:expand_undersized_textures", Hyprlang::INT{1});
|
||||
m_pConfig->addConfigValue("render:xp_mode", Hyprlang::INT{0});
|
||||
m_pConfig->addConfigValue("render:ctm_animation", Hyprlang::INT{2});
|
||||
- m_pConfig->addConfigValue("render:allow_early_buffer_release", Hyprlang::INT{1});
|
||||
|
||||
m_pConfig->addConfigValue("ecosystem:no_update_news", Hyprlang::INT{0});
|
||||
m_pConfig->addConfigValue("ecosystem:no_donation_nag", Hyprlang::INT{0});
|
||||
diff --git a/src/protocols/DRMSyncobj.cpp b/src/protocols/DRMSyncobj.cpp
|
||||
index af2fadfaa7d..0e8b4cb47fe 100644
|
||||
--- a/src/protocols/DRMSyncobj.cpp
|
||||
+++ b/src/protocols/DRMSyncobj.cpp
|
||||
@@ -88,11 +88,15 @@ CDRMSyncobjSurfaceResource::CDRMSyncobjSurfaceResource(UP<CWpLinuxDrmSyncobjSurf
|
||||
});
|
||||
|
||||
listeners.surfaceRoleCommit = surface->events.roleCommit.registerListener([this](std::any d) {
|
||||
- if (pendingAcquire.resource)
|
||||
- acquire = std::exchange(pendingAcquire, {});
|
||||
+ if (pendingAcquire.resource) {
|
||||
+ acquire = std::move(pendingAcquire);
|
||||
+ pendingAcquire = {};
|
||||
+ }
|
||||
|
||||
- if (pendingRelease.resource)
|
||||
- release = std::exchange(pendingRelease, {});
|
||||
+ if (pendingRelease.resource) {
|
||||
+ release = std::move(pendingRelease);
|
||||
+ pendingRelease = {};
|
||||
+ }
|
||||
});
|
||||
}
|
||||
|
||||
diff --git a/src/protocols/core/Compositor.cpp b/src/protocols/core/Compositor.cpp
|
||||
index 0dddf8b42c1..e3297da8a44 100644
|
||||
--- a/src/protocols/core/Compositor.cpp
|
||||
+++ b/src/protocols/core/Compositor.cpp
|
||||
@@ -11,7 +11,6 @@
|
||||
#include "../PresentationTime.hpp"
|
||||
#include "../DRMSyncobj.hpp"
|
||||
#include "../../render/Renderer.hpp"
|
||||
-#include "config/ConfigValue.hpp"
|
||||
#include <cstring>
|
||||
|
||||
class CDefaultSurfaceRole : public ISurfaceRole {
|
||||
@@ -422,14 +421,12 @@ void CWLSurfaceResource::commitPendingState() {
|
||||
if (stateLocked && syncobj)
|
||||
return;
|
||||
|
||||
- static auto PDROP = CConfigValue<Hyprlang::INT>("render:allow_early_buffer_release");
|
||||
- auto const previousBuffer = current.buffer;
|
||||
- current = pending;
|
||||
+ auto const previousBuffer = current.buffer;
|
||||
+ current = pending;
|
||||
pending.damage.clear();
|
||||
pending.bufferDamage.clear();
|
||||
pending.newBuffer = false;
|
||||
- if (!*PDROP)
|
||||
- dropPendingBuffer(); // at this point current.buffer holds the same SP and we don't use pending anymore
|
||||
+ dropPendingBuffer(); // at this point current.buffer holds the same SP and we don't use pending anymore
|
||||
|
||||
events.roleCommit.emit();
|
||||
|
||||
@@ -447,14 +444,6 @@ void CWLSurfaceResource::commitPendingState() {
|
||||
// TODO: don't update the entire texture
|
||||
if (role->role() == SURFACE_ROLE_CURSOR && !DAMAGE.empty())
|
||||
updateCursorShm(DAMAGE);
|
||||
-
|
||||
- // release the buffer if it's synchronous as update() has done everything thats needed
|
||||
- // so we can let the app know we're done.
|
||||
- // Some clients aren't ready to receive a release this early. Should be fine to release it on the next commitPendingState.
|
||||
- if (current.buffer->buffer->isSynchronous() && *PDROP) {
|
||||
- dropCurrentBuffer();
|
||||
- dropPendingBuffer(); // at this point current.buffer holds the same SP and we don't use pending anymore
|
||||
- }
|
||||
}
|
||||
|
||||
// TODO: we should _accumulate_ and not replace above if sync
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user