diff --git a/src/helpers/Monitor.cpp b/src/helpers/Monitor.cpp index e48432110b5..fead5db9445 100644 --- a/src/helpers/Monitor.cpp +++ b/src/helpers/Monitor.cpp @@ -1312,7 +1312,7 @@ bool CMonitor::attemptDirectScanout() { return false; } - auto explicitOptions = g_pHyprRenderer->getExplicitSyncSettings(); + auto explicitOptions = g_pHyprRenderer->getExplicitSyncSettings(output); // wait for the explicit fence if present, and if kms explicit is allowed bool DOEXPLICIT = PSURFACE->syncobj && PSURFACE->syncobj->current.acquireTimeline && PSURFACE->syncobj->current.acquireTimeline->timeline && explicitOptions.explicitKMSEnabled; diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 6f0bbe446a3..531ceb33240 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -1557,7 +1557,7 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { } } - auto explicitOptions = getExplicitSyncSettings(); + auto explicitOptions = getExplicitSyncSettings(pMonitor->output); if (!explicitOptions.explicitEnabled) return ok; @@ -2293,7 +2293,7 @@ void CHyprRenderer::endRender() { if (m_eRenderMode == RENDER_MODE_NORMAL) { PMONITOR->output->state->setBuffer(m_pCurrentBuffer); - auto explicitOptions = getExplicitSyncSettings(); + auto explicitOptions = getExplicitSyncSettings(PMONITOR->output); if (PMONITOR->inTimeline && explicitOptions.explicitEnabled && explicitOptions.explicitKMSEnabled) { auto sync = g_pHyprOpenGL->createEGLSync({}); @@ -2336,7 +2336,7 @@ bool CHyprRenderer::isNvidia() { return m_bNvidia; } -SExplicitSyncSettings CHyprRenderer::getExplicitSyncSettings() { +SExplicitSyncSettings CHyprRenderer::getExplicitSyncSettings(SP output) { static auto PENABLEEXPLICIT = CConfigValue("render:explicit_sync"); static auto PENABLEEXPLICITKMS = CConfigValue("render:explicit_sync_kms"); @@ -2344,6 +2344,14 @@ SExplicitSyncSettings CHyprRenderer::getExplicitSyncSettings() { settings.explicitEnabled = *PENABLEEXPLICIT; settings.explicitKMSEnabled = *PENABLEEXPLICITKMS; + if (!output->supportsExplicit) { + Debug::log(LOG, "Renderer: the aquamarine output does not support explicit, explicit settings are disabled."); + settings.explicitEnabled = false; + settings.explicitKMSEnabled = false; + + return settings; + } + if (*PENABLEEXPLICIT == 2 /* auto */) settings.explicitEnabled = true; if (*PENABLEEXPLICITKMS == 2 /* auto */) { diff --git a/src/render/Renderer.hpp b/src/render/Renderer.hpp index e64d41c1f47..731ed926c45 100644 --- a/src/render/Renderer.hpp +++ b/src/render/Renderer.hpp @@ -75,7 +75,7 @@ class CHyprRenderer { bool isNvidia(); void makeEGLCurrent(); void unsetEGL(); - SExplicitSyncSettings getExplicitSyncSettings(); + SExplicitSyncSettings getExplicitSyncSettings(SP output); void addWindowToRenderUnfocused(PHLWINDOW window); void makeWindowSnapshot(PHLWINDOW); void makeRawWindowSnapshot(PHLWINDOW, CFramebuffer*);