summaryrefslogtreecommitdiff
path: root/src/helpers/MonitorResources.cpp
diff options
context:
space:
mode:
authorUjinT34 <41110182+UjinT34@users.noreply.github.com>2026-05-08 00:28:34 +0300
committerGitHub <noreply@github.com>2026-05-07 22:28:34 +0100
commit39af3901b389f792a55176041dec9211c82ed1c9 (patch)
treecfe9a9b84e56d2553934aa1600ffe5789aaa667b /src/helpers/MonitorResources.cpp
parentc18186a519d188a3ae8caf9947a5420a25590b82 (diff)
renderer: more FP16 fixes (#14070)
* fix fp16 blur with invalidation * restore tonemap code * fix fade outs * add sdr compat for unaware surfaces * use a better work space, not linear, only for sdr * fix hl tf -> wp tf * cache workbuffer descriptions * linear not normalised WIP * clear offload fb * CM math * fix includes * use precalculated cm for shadows * inner glow cm * quad cm * fix unmodified copy * codegen * cache color CM * mark blur dirty when CM/DS changes * avoid icc workbuffer * fp16 blur finish hack * fix output hdr luminances * use srgb for mirroring/sharing with fp16 * defaults people --------- Co-authored-by: Vaxry <vaxry@vaxry.net>
Diffstat (limited to 'src/helpers/MonitorResources.cpp')
-rw-r--r--src/helpers/MonitorResources.cpp20
1 files changed, 9 insertions, 11 deletions
diff --git a/src/helpers/MonitorResources.cpp b/src/helpers/MonitorResources.cpp
index 8e7723c2..ef08fc37 100644
--- a/src/helpers/MonitorResources.cpp
+++ b/src/helpers/MonitorResources.cpp
@@ -32,7 +32,7 @@ void CMonitorResources::setImageDescription(NColorManagement::PImageDescription
for (const auto& res : m_workBuffers)
res.buffer->setImageDescription(imageDescription);
if (m_monitorMirrorFB)
- m_monitorMirrorFB->setImageDescription(NColorManagement::getDefaultImageDescription());
+ m_monitorMirrorFB->setImageDescription(getMirrorTexImageDescription());
if (m_mirrorTex)
m_mirrorTex->m_imageDescription = getMirrorTexImageDescription();
}
@@ -78,8 +78,8 @@ SP<Render::IFramebuffer> CMonitorResources::mirrorFB() {
m_monitorMirrorFB = g_pHyprRenderer->createFB(std::format("Monitor {} mirror FB", m_monitor->m_name));
if (!m_monitorMirrorFB->isAllocated()) {
- m_monitorMirrorFB->alloc(m_size.x, m_size.y, DRM_FORMAT_XRGB8888);
- m_monitorMirrorFB->setImageDescription(NColorManagement::getDefaultImageDescription());
+ m_monitorMirrorFB->alloc(m_size.x, m_size.y, m_monitor->m_activeMonitorRule.m_enable10bit ? DRM_FORMAT_XRGB2101010 : DRM_FORMAT_XRGB8888);
+ m_monitorMirrorFB->setImageDescription(getMirrorTexImageDescription());
}
return m_monitorMirrorFB;
@@ -90,20 +90,18 @@ SP<Render::ITexture> CMonitorResources::getMirrorTexture() {
}
NColorManagement::PImageDescription CMonitorResources::getMirrorTexImageDescription() {
- return CImageDescription::from(SImageDescription{
- .transferFunction = NColorManagement::CM_TRANSFER_FUNCTION_SRGB,
- .primariesNameSet = m_imageDescription->value().primariesNameSet,
- .primariesNamed = m_imageDescription->value().primariesNamed,
- .primaries = m_imageDescription->value().primaries,
- .luminances = {.min = SDR_MIN_LUMINANCE, .max = 80, .reference = 80},
- });
+ const auto TF = m_imageDescription->value().transferFunction;
+ if (TF == CM_TRANSFER_FUNCTION_GAMMA22 || TF == CM_TRANSFER_FUNCTION_SRGB)
+ return m_imageDescription;
+
+ return DEFAULT_SRGB_IMAGE_DESCRIPTION;
}
void CMonitorResources::enableMirror() {
if (m_mirrorTex)
return;
m_mirrorTex = g_pHyprRenderer->createTexture();
- m_mirrorTex->allocate({m_size.x, m_size.y}, DRM_FORMAT_XRGB8888);
+ m_mirrorTex->allocate({m_size.x, m_size.y}, m_monitor->m_activeMonitorRule.m_enable10bit ? DRM_FORMAT_XRGB2101010 : DRM_FORMAT_XRGB8888);
m_mirrorTex->m_imageDescription = getMirrorTexImageDescription();
m_monitor->m_blurFBDirty = true;
}