mirror of
https://github.com/hyprwm/Hyprland
synced 2025-12-25 19:10:03 +01:00
renderer/cm: make needsHDRupdate per-monitor state (#12564)
Co-authored-by: drzbida <55928036+drzbida@users.noreply.github.com>
This commit is contained in:
parent
9584b2d40e
commit
916e5d1aea
2 changed files with 5 additions and 6 deletions
|
|
@ -336,6 +336,7 @@ class CMonitor {
|
||||||
bool m_enabled = false;
|
bool m_enabled = false;
|
||||||
bool m_renderingInitPassed = false;
|
bool m_renderingInitPassed = false;
|
||||||
WP<CWindow> m_previousFSWindow;
|
WP<CWindow> m_previousFSWindow;
|
||||||
|
bool m_needsHDRupdate = false;
|
||||||
NColorManagement::SImageDescription m_imageDescription;
|
NColorManagement::SImageDescription m_imageDescription;
|
||||||
bool m_noShaderCTM = false; // sets drm CTM, restore needed
|
bool m_noShaderCTM = false; // sets drm CTM, restore needed
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -1557,8 +1557,6 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) {
|
||||||
static auto PAUTOHDR = CConfigValue<Hyprlang::INT>("render:cm_auto_hdr");
|
static auto PAUTOHDR = CConfigValue<Hyprlang::INT>("render:cm_auto_hdr");
|
||||||
static auto PNONSHADER = CConfigValue<Hyprlang::INT>("render:non_shader_cm");
|
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);
|
const bool configuredHDR = (pMonitor->m_cmType == NCMType::CM_HDR_EDID || pMonitor->m_cmType == NCMType::CM_HDR);
|
||||||
bool wantHDR = configuredHDR;
|
bool wantHDR = configuredHDR;
|
||||||
|
|
||||||
|
|
@ -1587,7 +1585,7 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) {
|
||||||
const bool surfaceIsHDR = SURF->m_colorManagement->isHDR();
|
const bool surfaceIsHDR = SURF->m_colorManagement->isHDR();
|
||||||
if (!SURF->m_colorManagement->isWindowsScRGB() && (*PPASS == 1 || ((*PPASS == 2 || !pMonitor->m_lastScanout.expired()) && surfaceIsHDR))) {
|
if (!SURF->m_colorManagement->isWindowsScRGB() && (*PPASS == 1 || ((*PPASS == 2 || !pMonitor->m_lastScanout.expired()) && surfaceIsHDR))) {
|
||||||
// passthrough
|
// 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()) {
|
if (SURF->m_colorManagement->needsHdrMetadataUpdate()) {
|
||||||
Debug::log(INFO, "[CM] Recreating HDR metadata for surface");
|
Debug::log(INFO, "[CM] Recreating HDR metadata for surface");
|
||||||
SURF->m_colorManagement->setHDRMetadata(createHDRMetadata(SURF->m_colorManagement->imageDescription(), pMonitor));
|
SURF->m_colorManagement->setHDRMetadata(createHDRMetadata(SURF->m_colorManagement->imageDescription(), pMonitor));
|
||||||
|
|
@ -1597,7 +1595,7 @@ bool CHyprRenderer::commitPendingAndDoExplicitSync(PHLMONITOR pMonitor) {
|
||||||
pMonitor->m_output->state->setHDRMetadata(SURF->m_colorManagement->hdrMetadata());
|
pMonitor->m_output->state->setHDRMetadata(SURF->m_colorManagement->hdrMetadata());
|
||||||
}
|
}
|
||||||
hdrIsHandled = true;
|
hdrIsHandled = true;
|
||||||
needsHDRupdate = false;
|
pMonitor->m_needsHDRupdate = false;
|
||||||
} else if (*PAUTOHDR && surfaceIsHDR)
|
} else if (*PAUTOHDR && surfaceIsHDR)
|
||||||
wantHDR = true; // auto-hdr: hdr on
|
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");
|
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);
|
pMonitor->m_output->state->setHDRMetadata(wantHDR ? createHDRMetadata(pMonitor->m_imageDescription, pMonitor) : NO_HDR_METADATA);
|
||||||
}
|
}
|
||||||
needsHDRupdate = true;
|
pMonitor->m_needsHDRupdate = true;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Reference in a new issue