diff options
| author | UjinT34 <41110182+UjinT34@users.noreply.github.com> | 2025-01-12 20:02:41 +0300 |
|---|---|---|
| committer | GitHub <noreply@github.com> | 2025-01-12 17:02:41 +0000 |
| commit | a3a74993173662c06025ca633faa68b5590e2c5b (patch) | |
| tree | 0a84ed7b9c8a45f4241de8f9729e8c189b41b024 /src/render/Renderer.cpp | |
| parent | b117fae3b493b9d5ac7ada3140cac555c3979dfd (diff) | |
renderer: Do not set hdr metadata unless needed (#9014)
Diffstat (limited to 'src/render/Renderer.cpp')
| -rw-r--r-- | src/render/Renderer.cpp | 23 |
1 files changed, 16 insertions, 7 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index cf25d477..b9c8dd98 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -1460,9 +1460,10 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { pMonitor->output->state->setExplicitInFence(inFD); static auto PWIDE = CConfigValue<Hyprlang::INT>("experimental:wide_color_gamut"); - if (pMonitor->output->state->state().wideColorGamut != *PWIDE) + if (pMonitor->output->state->state().wideColorGamut != *PWIDE) { Debug::log(TRACE, "Setting wide color gamut {}", *PWIDE ? "on" : "off"); - pMonitor->output->state->setWideColorGamut(*PWIDE); + pMonitor->output->state->setWideColorGamut(*PWIDE); + } static auto PHDR = CConfigValue<Hyprlang::INT>("experimental:hdr"); @@ -1472,12 +1473,20 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) { if (pMonitor->activeWorkspace && pMonitor->activeWorkspace->m_bHasFullscreenWindow && pMonitor->activeWorkspace->m_efFullscreenMode == FSMODE_FULLSCREEN) { const auto WINDOW = pMonitor->activeWorkspace->getFullscreenWindow(); const auto SURF = WINDOW->m_pWLSurface->resource(); - if (SURF->colorManagement.valid() && SURF->colorManagement->hasImageDescription()) - pMonitor->output->state->setHDRMetadata(createHDRMetadata(SURF->colorManagement.get()->imageDescription(), pMonitor->output->parsedEDID)); - else + if (SURF->colorManagement.valid() && SURF->colorManagement->hasImageDescription()) { + bool needsHdrMetadataUpdate = SURF->colorManagement->needsHdrMetadataUpdate() || m_previousFSWindow != WINDOW; + if (SURF->colorManagement->needsHdrMetadataUpdate()) + SURF->colorManagement->setHDRMetadata(createHDRMetadata(SURF->colorManagement.get()->imageDescription(), pMonitor->output->parsedEDID)); + if (needsHdrMetadataUpdate) + pMonitor->output->state->setHDRMetadata(SURF->colorManagement->hdrMetadata()); + } else pMonitor->output->state->setHDRMetadata(*PHDR ? createHDRMetadata(2, pMonitor->output->parsedEDID) : createHDRMetadata(0, pMonitor->output->parsedEDID)); - } else - pMonitor->output->state->setHDRMetadata(*PHDR ? createHDRMetadata(2, pMonitor->output->parsedEDID) : createHDRMetadata(0, pMonitor->output->parsedEDID)); + m_previousFSWindow = WINDOW; + } else { + if ((pMonitor->output->state->state().hdrMetadata.hdmi_metadata_type1.eotf == 2) != *PHDR) + pMonitor->output->state->setHDRMetadata(*PHDR ? createHDRMetadata(2, pMonitor->output->parsedEDID) : createHDRMetadata(0, pMonitor->output->parsedEDID)); + m_previousFSWindow.reset(); + } } if (pMonitor->ctmUpdated) { |
