From 8a24bb3bb6100fb2c1fe31991036dd57dc7723c1 Mon Sep 17 00:00:00 2001 From: Lucas Ritzdorf <42657792+LRitzdorf@users.noreply.github.com> Date: Tue, 11 Aug 2026 11:06:15 -0600 Subject: [PATCH] render/cm: fix hdrMetadataEqual returning inverted result (#15825) std::memcmp returns a nonzero value when the buffers differ, so hdrMetadataEqual() returned true for differing metadata and false for identical metadata. The caller in commitFrame compares !hdrMetadataEqual(WANTED, CURRENT), which inverted this again: identical HDR metadata was treated as changed every frame, re-sending AQ_OUTPUT_STATE_HDR and forcing a full DRM modeset on every commit. Fixes a per-frame modeset loop on displays with HDR metadata configured (e.g. cm=hdredid). Co-authored-by: neonvoidx --- src/render/Renderer.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/render/Renderer.cpp b/src/render/Renderer.cpp index 4c3274b1a..f91fb06f7 100644 --- a/src/render/Renderer.cpp +++ b/src/render/Renderer.cpp @@ -2304,7 +2304,7 @@ static bool hdrMetadataEqual(const hdr_output_metadata& a, const hdr_output_meta return false; static_assert(std::has_unique_object_representations_v); - return std::memcmp(&a.hdmi_metadata_type1, &b.hdmi_metadata_type1, sizeof(a.hdmi_metadata_type1)); + return std::memcmp(&a.hdmi_metadata_type1, &b.hdmi_metadata_type1, sizeof(a.hdmi_metadata_type1)) == 0; } void IHyprRenderer::handleFullscreenSettings(PHLMONITOR pMonitor) {