summaryrefslogtreecommitdiff
path: root/src/render/Renderer.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/render/Renderer.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/render/Renderer.cpp')
-rw-r--r--src/render/Renderer.cpp29
1 files changed, 9 insertions, 20 deletions
diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp
index 635bef55..0cb713f1 100644
--- a/src/render/Renderer.cpp
+++ b/src/render/Renderer.cpp
@@ -2020,18 +2020,8 @@ void IHyprRenderer::renderMonitor(PHLMONITOR pMonitor, bool commit) {
}
handleFullscreenSettings(pMonitor);
return;
- } else if (!pMonitor->m_lastScanout.expired() || pMonitor->m_directScanoutIsActive) {
- Log::logger->log(Log::DEBUG, "Left a direct scanout.");
- pMonitor->m_lastScanout.reset();
- pMonitor->m_previousFSWindow.reset(); // recalc fs settings
- pMonitor->m_directScanoutIsActive = false;
-
- // reset DRM format, but only if needed since it might modeset
- if (pMonitor->m_output->state->state().drmFormat != pMonitor->m_prevDrmFormat)
- pMonitor->m_output->state->setFormat(pMonitor->m_prevDrmFormat);
-
- pMonitor->m_drmFormat = pMonitor->m_prevDrmFormat;
- }
+ } else if (!pMonitor->m_lastScanout.expired() || pMonitor->m_directScanoutIsActive)
+ pMonitor->handleDSleave();
}
Event::bus()->m_events.render.pre.emit(pMonitor);
@@ -3049,6 +3039,7 @@ void IHyprRenderer::makeSnapshot(PHLWINDOW pWindow) {
const auto PFRAMEBUFFER = ref->m_snapshotFB;
PFRAMEBUFFER->alloc(PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, DRM_FORMAT_ABGR8888);
+ PFRAMEBUFFER->setImageDescription(workBufferImageDescription());
beginFullFakeRender(PMONITOR, fakeDamage, PFRAMEBUFFER);
@@ -3090,6 +3081,7 @@ void IHyprRenderer::makeSnapshot(PHLLS pLayer) {
const auto PFRAMEBUFFER = pLayer->m_snapshotFB;
PFRAMEBUFFER->alloc(PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, DRM_FORMAT_ABGR8888);
+ PFRAMEBUFFER->setImageDescription(workBufferImageDescription());
beginFullFakeRender(PMONITOR, fakeDamage, PFRAMEBUFFER);
@@ -3132,6 +3124,7 @@ void IHyprRenderer::makeSnapshot(WP<Desktop::View::CPopup> popup) {
const auto PFRAMEBUFFER = popup->m_snapshotFB;
PFRAMEBUFFER->alloc(PMONITOR->m_pixelSize.x, PMONITOR->m_pixelSize.y, DRM_FORMAT_ABGR8888);
+ PFRAMEBUFFER->setImageDescription(workBufferImageDescription());
beginFullFakeRender(PMONITOR, fakeDamage, PFRAMEBUFFER);
@@ -3314,14 +3307,10 @@ void IHyprRenderer::renderSnapshot(WP<Desktop::View::CPopup> popup) {
}
NColorManagement::PImageDescription IHyprRenderer::workBufferImageDescription() {
- // TODO
- // const bool IS_MONITOR_ICC = m_renderData.pMonitor->m_imageDescription.valid() && m_renderData.pMonitor->m_imageDescription->value().icc.present;
- // const auto sdrEOTF = NTransferFunction::fromConfig(IS_MONITOR_ICC);
- // const auto CHOSEN_SDR_EOTF = sdrEOTF != NTransferFunction::TF_SRGB ? NColorManagement::CM_TRANSFER_FUNCTION_GAMMA22 : NColorManagement::CM_TRANSFER_FUNCTION_SRGB;
-
- return m_renderData.pMonitor->useFP16() ?
- LINEAR_IMAGE_DESCRIPTION :
- m_renderData.pMonitor->m_imageDescription; //CImageDescription::from(NColorManagement::SImageDescription{.transferFunction = CHOSEN_SDR_EOTF});
+ if (!m_renderData.pMonitor)
+ return LINEAR_IMAGE_DESCRIPTION;
+
+ return m_renderData.pMonitor->workBufferImageDescription();
}
bool IHyprRenderer::shouldBlur(PHLLS ls) {