From 186a79ef443144ebbf65ff2c8ba9f7ecdfc5a4ce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20Lewandowski?= <49685661+FakeMichau@users.noreply.github.com> Date: Wed, 5 Feb 2025 07:20:44 +0100 Subject: [PATCH] Fix upscaler not saving correctly (#189) --- OptiScaler/Config.h | 81 ++++++++++++++++++--------------- OptiScaler/menu/menu_common.cpp | 6 +-- OptiScaler/menu/menu_common.h | 6 +-- 3 files changed, 50 insertions(+), 43 deletions(-) diff --git a/OptiScaler/Config.h b/OptiScaler/Config.h index cf6b67e1..7823ad28 100644 --- a/OptiScaler/Config.h +++ b/OptiScaler/Config.h @@ -5,7 +5,14 @@ #include #include -template +enum HasDefaultValue +{ + WithDefault, + NoDefault, + SoftDefault // Change always gets saved to the config +}; + +template class CustomOptional : public std::optional { private: T _defaultValue; @@ -13,10 +20,10 @@ private: bool _volatile; public: - CustomOptional(T defaultValue) requires (HasDefaultValue) + CustomOptional(T defaultValue) requires (defaultState != NoDefault) : std::optional(), _defaultValue(std::move(defaultValue)), _configIni(std::nullopt), _volatile(false) {} - CustomOptional() requires (!HasDefaultValue) + CustomOptional() requires (defaultState == NoDefault) : std::optional(), _defaultValue(T{}), _configIni(std::nullopt), _volatile(false) {} // Prevents a change from being saved to ini @@ -70,15 +77,15 @@ public: return *this; } - constexpr T value_or_default() const& requires (HasDefaultValue) { + constexpr T value_or_default() const& requires (defaultState != NoDefault) { return this->has_value() ? this->value() : _defaultValue; } - constexpr T value_or_default()&& requires (HasDefaultValue) { + constexpr T value_or_default()&& requires (defaultState != NoDefault) { return this->has_value() ? std::move(this->value()) : std::move(_defaultValue); } - constexpr std::optional value_for_config() requires (HasDefaultValue) { + constexpr std::optional value_for_config() requires (defaultState == WithDefault) { if (_volatile) { if (_configIni != _defaultValue) return _configIni; @@ -92,7 +99,7 @@ public: return this->value(); } - constexpr std::optional value_for_config() requires (!HasDefaultValue) { + constexpr std::optional value_for_config() requires (defaultState != WithDefault) { if (_volatile) return _configIni; @@ -118,12 +125,12 @@ public: Config(); // Init flags - CustomOptional DepthInverted; - CustomOptional AutoExposure; - CustomOptional HDR; - CustomOptional JitterCancellation; - CustomOptional DisplayResolution; - CustomOptional DisableReactiveMask; + CustomOptional DepthInverted; + CustomOptional AutoExposure; + CustomOptional HDR; + CustomOptional JitterCancellation; + CustomOptional DisplayResolution; + CustomOptional DisableReactiveMask; CustomOptional DlssReactiveMaskBias{ 0.45f }; // Logging @@ -142,12 +149,12 @@ public: CustomOptional BuildPipelines{ true }; CustomOptional NetworkModel{ 0 }; CustomOptional CreateHeaps{ true }; - CustomOptional XeSSLibrary; + CustomOptional XeSSLibrary; // DLSS CustomOptional DLSSEnabled{ true }; - CustomOptional NvngxPath; - CustomOptional NVNGX_DLSS_Library; + CustomOptional NvngxPath; + CustomOptional NVNGX_DLSS_Library; CustomOptional RenderPresetOverride{ false }; CustomOptional RenderPresetForAll{ 0 }; CustomOptional RenderPresetDLAA{ 0 }; @@ -209,16 +216,16 @@ public: CustomOptional QualityRatio_UltraPerformance{ 3.0f }; // Hotfixes - CustomOptional MipmapBiasOverride; // disabled by default + CustomOptional MipmapBiasOverride; // disabled by default CustomOptional MipmapBiasFixedOverride{ false }; CustomOptional MipmapBiasScaleOverride{ false }; CustomOptional MipmapBiasOverrideAll{ false }; - CustomOptional AnisotropyOverride; // disabled by default - CustomOptional RoundInternalResolution; // disabled by default + CustomOptional AnisotropyOverride; // disabled by default + CustomOptional RoundInternalResolution; // disabled by default CustomOptional RestoreComputeSignature{ false }; CustomOptional RestoreGraphicSignature{ false }; - CustomOptional SkipFirstFrames; // disabled by default + CustomOptional SkipFirstFrames; // disabled by default CustomOptional UsePrecompiledShaders{ true }; @@ -226,17 +233,17 @@ public: CustomOptional PreferDedicatedGpu{ false }; CustomOptional PreferFirstDedicatedGpu{ false }; - CustomOptional ColorResourceBarrier; // disabled by default - CustomOptional MVResourceBarrier; // disabled by default - CustomOptional DepthResourceBarrier; // disabled by default - CustomOptional ExposureResourceBarrier; // disabled by default - CustomOptional MaskResourceBarrier; // disabled by default - CustomOptional OutputResourceBarrier; // disabled by default + CustomOptional ColorResourceBarrier; // disabled by default + CustomOptional MVResourceBarrier; // disabled by default + CustomOptional DepthResourceBarrier; // disabled by default + CustomOptional ExposureResourceBarrier; // disabled by default + CustomOptional MaskResourceBarrier; // disabled by default + CustomOptional OutputResourceBarrier; // disabled by default // Upscalers - CustomOptional Dx11Upscaler{ "fsr22" }; - CustomOptional Dx12Upscaler{ "xess" }; - CustomOptional VulkanUpscaler{ "fsr21" }; + CustomOptional Dx11Upscaler{ "fsr22" }; + CustomOptional Dx12Upscaler{ "xess" }; + CustomOptional VulkanUpscaler{ "fsr21" }; // Output Scaling CustomOptional OutputScalingEnabled{ false }; @@ -273,16 +280,16 @@ public: // NVAPI Override CustomOptional OverrideNvapiDll{ false }; - CustomOptional NvapiDllPath; + CustomOptional NvapiDllPath; // Spoofing CustomOptional DxgiSpoofing{ true }; - CustomOptional DxgiBlacklist; // disabled by default - CustomOptional DxgiVRAM; // disabled by default + CustomOptional DxgiBlacklist; // disabled by default + CustomOptional DxgiVRAM; // disabled by default CustomOptional VulkanSpoofing{ false }; CustomOptional VulkanExtensionSpoofing{ false }; CustomOptional SpoofedGPUName{ L"NVIDIA GeForce RTX 4090" }; - CustomOptional VulkanVRAM; // disabled by default + CustomOptional VulkanVRAM; // disabled by default // Plugins CustomOptional PluginPath{ L"plugins" }; @@ -299,10 +306,10 @@ public: CustomOptional FGHUDFixExtended{ false }; CustomOptional FGImmediateCapture{ false }; CustomOptional FGHUDLimit{ 1 }; - CustomOptional FGRectLeft; - CustomOptional FGRectTop; - CustomOptional FGRectWidth; - CustomOptional FGRectHeight; + CustomOptional FGRectLeft; + CustomOptional FGRectTop; + CustomOptional FGRectWidth; + CustomOptional FGRectHeight; CustomOptional FGDisableOverlays{ true }; CustomOptional FGAlwaysTrackHeaps{ false }; CustomOptional FGMakeDepthCopy{ true }; diff --git a/OptiScaler/menu/menu_common.cpp b/OptiScaler/menu/menu_common.cpp index 73aa179e..8aeb3a79 100644 --- a/OptiScaler/menu/menu_common.cpp +++ b/OptiScaler/menu/menu_common.cpp @@ -651,7 +651,7 @@ void MenuCommon::AddVulkanBackends(std::string* code, std::string* name) } } -template +template void MenuCommon::AddResourceBarrier(std::string name, CustomOptional* value) { const char* states[] = { "AUTO", "COMMON", "VERTEX_AND_CONSTANT_BUFFER", "INDEX_BUFFER", "RENDER_TARGET", "UNORDERED_ACCESS", "DEPTH_WRITE", @@ -691,7 +691,7 @@ void MenuCommon::AddResourceBarrier(std::string name, CustomOptional } } -template +template void MenuCommon::AddRenderPreset(std::string name, CustomOptional* value) { const char* presets[] = { "DEFAULT", "PRESET A", "PRESET B", "PRESET C", "PRESET D", "PRESET E", "PRESET F", "PRESET G", @@ -718,7 +718,7 @@ void MenuCommon::AddRenderPreset(std::string name, CustomOptional* PopulateCombo(name, value, presets, presetsDesc, 16); } -template +template void MenuCommon::PopulateCombo(std::string name, CustomOptional* value, const char* names[], const std::string desc[], int length) { int selected = value->value_or(0); diff --git a/OptiScaler/menu/menu_common.h b/OptiScaler/menu/menu_common.h index a6edb28e..fb2ae459 100644 --- a/OptiScaler/menu/menu_common.h +++ b/OptiScaler/menu/menu_common.h @@ -117,11 +117,11 @@ private: static void AddDx11Backends(std::string* code, std::string* name); static void AddDx12Backends(std::string* code, std::string* name); static void AddVulkanBackends(std::string* code, std::string* name); - template + template static void AddResourceBarrier(std::string name, CustomOptional* value); - template + template static void AddRenderPreset(std::string name, CustomOptional* value); - template + template static void PopulateCombo(std::string name, CustomOptional* value, const char* names[], const std::string desc[], int length); public: