summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
authorTom Englund <tomenglund26@gmail.com>2025-03-20 11:39:55 +0100
committerGitHub <noreply@github.com>2025-03-20 11:39:55 +0100
commitf6ca4bac51595555916f7403ae178680791f824c (patch)
treea76ced32c16ada9ca99bccf548a7eaa034297298 /src/render/Renderer.cpp
parent155eba57d81fa2553f1eda8788bd9d1a16947a43 (diff)
syncobj: restore SHM buffer reset (#9675)
reset shm buffers early to mitigate stuttering animations, also reuse the monitors eglSync and store the eglsync per monitor. this however reintroduces flickering in dbeaver nonsyncobj application.
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp14
1 files changed, 6 insertions, 8 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 62e4b77d..b76d67e5 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -1526,21 +1526,19 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) {
return ok;
Debug::log(TRACE, "Explicit: {} presented", explicitPresented.size());
- auto sync = g_pHyprOpenGL->createEGLSync(pMonitor->inFence.get());
- if (!sync)
- Debug::log(TRACE, "Explicit: can't add sync, EGLSync failed");
+ if (!pMonitor->eglSync)
+ Debug::log(TRACE, "Explicit: can't add sync, monitor has no EGLSync");
else {
for (auto const& e : explicitPresented) {
if (!e->current.buffer || !e->current.buffer->buffer || !e->current.buffer->buffer->syncReleaser)
continue;
- e->current.buffer->buffer->syncReleaser->addReleaseSync(sync);
+ e->current.buffer->buffer->syncReleaser->addReleaseSync(pMonitor->eglSync);
}
}
explicitPresented.clear();
- pMonitor->output->state->resetExplicitFences();
return ok;
}
@@ -2257,13 +2255,13 @@ void CHyprRenderer::endRender() {
auto explicitOptions = getExplicitSyncSettings(PMONITOR->output);
if (PMONITOR->inTimeline && explicitOptions.explicitEnabled && explicitOptions.explicitKMSEnabled) {
- auto sync = g_pHyprOpenGL->createEGLSync();
- if (!sync) {
+ PMONITOR->eglSync = g_pHyprOpenGL->createEGLSync();
+ if (!PMONITOR->eglSync) {
Debug::log(ERR, "renderer: couldn't create an EGLSync for out in endRender");
return;
}
- bool ok = PMONITOR->inTimeline->importFromSyncFileFD(PMONITOR->commitSeq, sync->fd());
+ bool ok = PMONITOR->inTimeline->importFromSyncFileFD(PMONITOR->commitSeq, PMONITOR->eglSync->fd());
if (!ok) {
Debug::log(ERR, "renderer: couldn't import from sync file fd in endRender");
return;