From 8f948827a69499c0b112043debad35f82a312b6b Mon Sep 17 00:00:00 2001 From: Vaxry <43317083+vaxerski@users.noreply.github.com> Date: Tue, 8 Jul 2025 12:41:10 +0200 Subject: Renderer: Implement new render scheduling (#10936) Implements a new render scheduling method, where we triple buffer when necessary. Enabled by default, improves FPS on underpowered devices. --------- Co-authored-by: Mihai Fufezan --- src/render/Renderer.cpp | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) (limited to 'src/render/Renderer.cpp') diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index e85d59b5..da52eaef 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -1153,7 +1153,7 @@ void CHyprRenderer::calculateUVForSurface(PHLWINDOW pWindow, SPm_output->state->setPresentationMode(shouldTear ? Aquamarine::eOutputPresentationMode::AQ_OUTPUT_PRESENTATION_IMMEDIATE : Aquamarine::eOutputPresentationMode::AQ_OUTPUT_PRESENTATION_VSYNC); - commitPendingAndDoExplicitSync(pMonitor); + if (commit) + commitPendingAndDoExplicitSync(pMonitor); if (shouldTear) pMonitor->m_tearingState.busy = true; @@ -2247,12 +2248,10 @@ bool CHyprRenderer::beginRender(PHLMONITOR pMonitor, CRegion& damage, eRenderMod return true; } - /* This is a constant expression, as we always use double-buffering in our swapchain - TODO: Rewrite the CDamageRing to take advantage of that maybe? It's made to support longer swapchains atm because we used to do wlroots */ - static constexpr const int HL_BUFFER_AGE = 2; + int bufferAge = 0; if (!buffer) { - m_currentBuffer = pMonitor->m_output->swapchain->next(nullptr); + m_currentBuffer = pMonitor->m_output->swapchain->next(&bufferAge); if (!m_currentBuffer) { Debug::log(ERR, "Failed to acquire swapchain buffer for {}", pMonitor->m_name); return false; @@ -2273,7 +2272,7 @@ bool CHyprRenderer::beginRender(PHLMONITOR pMonitor, CRegion& damage, eRenderMod } if (mode == RENDER_MODE_NORMAL) { - damage = pMonitor->m_damage.getBufferDamage(HL_BUFFER_AGE); + damage = pMonitor->m_damage.getBufferDamage(bufferAge); pMonitor->m_damage.rotate(); } -- cgit v1.2.3