summaryrefslogtreecommitdiff
path: root/src/render/Renderer.cpp
diff options
context:
space:
mode:
authorbyddha <55928036+byddha@users.noreply.github.com>2025-12-07 22:47:27 +0200
committerGitHub <noreply@github.com>2025-12-07 20:47:27 +0000
commit916e5d1aea2dbf6488547728055b737817fee6b4 (patch)
tree410c851c77e43388e52c4f225ee79affab56a298 /src/render/Renderer.cpp
parent9584b2d40ed8a2d84dd59aaea2955660601ba9cf (diff)
renderer/cm: make needsHDRupdate per-monitor state (#12564)
Co-authored-by: drzbida <55928036+drzbida@users.noreply.github.com>
Diffstat (limited to 'src/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp10
1 files changed, 4 insertions, 6 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 4190018f..2c813000 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -1557,8 +1557,6 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) {
static auto PAUTOHDR = CConfigValue<Hyprlang::INT>("render:cm_auto_hdr");
static auto PNONSHADER = CConfigValue<Hyprlang::INT>("render:non_shader_cm");
- static bool needsHDRupdate = false;
-
const bool configuredHDR = (pMonitor->m_cmType == NCMType::CM_HDR_EDID || pMonitor->m_cmType == NCMType::CM_HDR);
bool wantHDR = configuredHDR;
@@ -1587,7 +1585,7 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) {
const bool surfaceIsHDR = SURF->m_colorManagement->isHDR();
if (!SURF->m_colorManagement->isWindowsScRGB() && (*PPASS == 1 || ((*PPASS == 2 || !pMonitor->m_lastScanout.expired()) && surfaceIsHDR))) {
// passthrough
- bool needsHdrMetadataUpdate = SURF->m_colorManagement->needsHdrMetadataUpdate() || pMonitor->m_previousFSWindow != FS_WINDOW || needsHDRupdate;
+ bool needsHdrMetadataUpdate = SURF->m_colorManagement->needsHdrMetadataUpdate() || pMonitor->m_previousFSWindow != FS_WINDOW || pMonitor->m_needsHDRupdate;
if (SURF->m_colorManagement->needsHdrMetadataUpdate()) {
Debug::log(INFO, "[CM] Recreating HDR metadata for surface");
SURF->m_colorManagement->setHDRMetadata(createHDRMetadata(SURF->m_colorManagement->imageDescription(), pMonitor));
@@ -1596,8 +1594,8 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) {
Debug::log(INFO, "[CM] Updating HDR metadata from surface");
pMonitor->m_output->state->setHDRMetadata(SURF->m_colorManagement->hdrMetadata());
}
- hdrIsHandled = true;
- needsHDRupdate = false;
+ hdrIsHandled = true;
+ pMonitor->m_needsHDRupdate = false;
} else if (*PAUTOHDR && surfaceIsHDR)
wantHDR = true; // auto-hdr: hdr on
}
@@ -1617,7 +1615,7 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) {
Debug::log(INFO, wantHDR ? "[CM] Updating HDR metadata from monitor" : "[CM] Restoring SDR mode");
pMonitor->m_output->state->setHDRMetadata(wantHDR ? createHDRMetadata(pMonitor->m_imageDescription, pMonitor) : NO_HDR_METADATA);
}
- needsHDRupdate = true;
+ pMonitor->m_needsHDRupdate = true;
}
}