diff options
| author | Vaxry <43317083+vaxerski@users.noreply.github.com> | 2025-07-19 12:38:41 +0200 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-07-19 12:38:41 +0200 |
| commit | d84699d8e5e984422da37595ee41fc0d8d93fef5 (patch) | |
| tree | b3ed5c1f47d25e961c53c823ead9d0000141a138 /src/render/Renderer.cpp | |
| parent | ae3cc48f223386b057137400354ed0ca1f7a8b1a (diff) | |
opengl: detect android fence support and disable explicit if it's missing (#11077)
Checks for explicit sync support via the android fences, and falls back to implicit sync if it isn't
Diffstat (limited to 'src/render/Renderer.cpp')
| -rw-r--r-- | src/render/Renderer.cpp | 22 |
1 files changed, 17 insertions, 5 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index e9797fbe..13f8ff4d 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -2326,6 +2326,22 @@ void CHyprRenderer::endRender(const std::function<void()>& renderingDoneCallback if (m_renderMode == RENDER_MODE_NORMAL) PMONITOR->m_output->state->setBuffer(m_currentBuffer); + if (!g_pHyprOpenGL->explicitSyncSupported()) { + Debug::log(TRACE, "renderer: Explicit sync unsupported, falling back to implicit in endRender"); + + // nvidia doesn't have implicit sync, so we have to explicitly wait here + if (isNvidia() && *PNVIDIAANTIFLICKER) + glFinish(); + else + glFlush(); // mark an implicit sync point + + m_usedAsyncBuffers.clear(); // release all buffer refs and hope implicit sync works + if (renderingDoneCallback) + renderingDoneCallback(); + + return; + } + UP<CEGLSync> eglSync = CEGLSync::create(); if (eglSync && eglSync->isValid()) { for (auto const& buf : m_usedAsyncBuffers) { @@ -2350,11 +2366,7 @@ void CHyprRenderer::endRender(const std::function<void()>& renderingDoneCallback PMONITOR->m_output->state->setExplicitInFence(PMONITOR->m_inFence.get()); } } else { - Debug::log(ERR, "renderer: couldn't use EGLSync for explicit gpu synchronization"); - - // nvidia doesn't have implicit sync, so we have to explicitly wait here - if (isNvidia() && *PNVIDIAANTIFLICKER) - glFinish(); + Debug::log(ERR, "renderer: Explicit sync failed, releasing resources"); m_usedAsyncBuffers.clear(); // release all buffer refs and hope implicit sync works if (renderingDoneCallback) |
