From 39af3901b389f792a55176041dec9211c82ed1c9 Mon Sep 17 00:00:00 2001 From: UjinT34 <41110182+UjinT34@users.noreply.github.com> Date: Fri, 8 May 2026 00:28:34 +0300 Subject: 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 --- src/render/Renderer.cpp | 29 +++++++++-------------------- 1 file changed, 9 insertions(+), 20 deletions(-) (limited to 'src/render/Renderer.cpp') 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 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 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) { -- cgit v1.2.3