From 90de845cfc328ef70f14d4092f56e930c59f4727 Mon Sep 17 00:00:00 2001 From: Joshua Ashton Date: Mon, 3 Apr 2023 21:27:55 +0100 Subject: [PATCH] steamcompmgr: Fix setting lut override multiple times --- src/rendervulkan.hpp | 2 +- src/steamcompmgr.cpp | 20 +++++++------------- 2 files changed, 8 insertions(+), 14 deletions(-) diff --git a/src/rendervulkan.hpp b/src/rendervulkan.hpp index a9f515a..f7bad78 100644 --- a/src/rendervulkan.hpp +++ b/src/rendervulkan.hpp @@ -342,7 +342,7 @@ using mat3x4 = std::array, 3>; struct gamescope_color_mgmt_t { bool enabled; - bool hasOverrides; + uint32_t externalDirtyCtr; nightmode_t nightmode; float sdrGamutWideness; // user property to widen gamut displaycolorimetry_t nativeDisplayColorimetry; diff --git a/src/steamcompmgr.cpp b/src/steamcompmgr.cpp index 396a633..e913a78 100644 --- a/src/steamcompmgr.cpp +++ b/src/steamcompmgr.cpp @@ -145,7 +145,7 @@ update_color_mgmt() EOTF planeEOTF = static_cast( i ); calcColorTransform( &lut1d[0], nLutSize1d, &lut3d[0], nLutEdgeSize3d, syntheticInputColorimetry, nativeDisplayOutput, syntheticInputColorMapping, g_ColorMgmt.pending.nightmode, planeEOTF ); - if ( g_ColorMgmt.pending.hasOverrides ) + if ( !g_ColorMgmtLutsOverride[i].lut3d.empty() && !g_ColorMgmtLutsOverride[i].lut3d.empty() ) g_ColorMgmtLuts[i] = g_ColorMgmtLutsOverride[i]; else if ( !lut3d.empty() && !lut1d.empty() ) g_ColorMgmtLuts[i] = gamescope_color_mgmt_luts{ lut3d, lut1d }; @@ -195,14 +195,12 @@ bool set_color_mgmt_enabled( bool bEnabled ) bool set_color_3dlut_override(const char *path) { - bool had_lut = !g_ColorMgmtLutsOverride[1].lut3d.empty(); - g_ColorMgmtLutsOverride[1].lut3d.clear(); - g_ColorMgmt.pending.hasOverrides = !g_ColorMgmtLutsOverride[1].lut1d.empty() && !g_ColorMgmtLutsOverride[1].lut3d.empty(); + g_ColorMgmt.pending.externalDirtyCtr++; FILE *f = fopen(path, "rb"); if (!f) { - return had_lut; + return true; } fseek(f, 0, SEEK_END); @@ -212,28 +210,25 @@ bool set_color_3dlut_override(const char *path) size_t elems = fsize / sizeof(uint16_t); if (elems == 0) { - return had_lut; + return true; } auto data = std::vector(elems); fread(data.data(), elems, sizeof(uint16_t), f); g_ColorMgmtLutsOverride[1].lut3d = std::move(data); - g_ColorMgmt.pending.hasOverrides = !g_ColorMgmtLutsOverride[1].lut1d.empty() && !g_ColorMgmtLutsOverride[1].lut3d.empty(); return true; } bool set_color_shaperlut_override(const char *path) { - bool had_lut = !g_ColorMgmtLutsOverride[1].lut1d.empty(); - g_ColorMgmtLutsOverride[1].lut1d.clear(); - g_ColorMgmt.pending.hasOverrides = !g_ColorMgmtLutsOverride[1].lut1d.empty() && !g_ColorMgmtLutsOverride[1].lut3d.empty(); + g_ColorMgmt.pending.externalDirtyCtr++; FILE *f = fopen(path, "rb"); if (!f) { - return had_lut; + return true; } fseek(f, 0, SEEK_END); @@ -243,14 +238,13 @@ bool set_color_shaperlut_override(const char *path) size_t elems = fsize / sizeof(uint16_t); if (elems == 0) { - return had_lut; + return true; } auto data = std::vector(elems); fread(data.data(), elems, sizeof(uint16_t), f); g_ColorMgmtLutsOverride[1].lut1d = std::move(data); - g_ColorMgmt.pending.hasOverrides = !g_ColorMgmtLutsOverride[1].lut1d.empty() && !g_ColorMgmtLutsOverride[1].lut3d.empty(); return true; }