mirror of
https://github.com/optiscaler/OptiScaler.git
synced 2026-05-12 20:51:00 +00:00
fix outputscaling behavior of xess & dlss
auto update menu when output scaling settings changed from upscaler
This commit is contained in:
@@ -156,10 +156,59 @@ void DLSSFeature::ProcessInitParams(NVSDK_NGX_Parameter* InParameters)
|
||||
_targetHeight = DisplayHeight();
|
||||
}
|
||||
|
||||
InParameters->Set(NVSDK_NGX_Parameter_Width, RenderWidth());
|
||||
InParameters->Set(NVSDK_NGX_Parameter_Height, RenderHeight());
|
||||
InParameters->Set(NVSDK_NGX_Parameter_OutWidth, TargetWidth());
|
||||
InParameters->Set(NVSDK_NGX_Parameter_OutHeight, TargetHeight());
|
||||
// extended limits changes how resolution
|
||||
if (Config::Instance()->ExtendedLimits.value_or(false))
|
||||
{
|
||||
InParameters->Set(NVSDK_NGX_Parameter_Width, RenderWidth());
|
||||
InParameters->Set(NVSDK_NGX_Parameter_Height, RenderHeight());
|
||||
|
||||
_targetWidth = RenderWidth() < TargetWidth() ? TargetWidth() : RenderWidth();
|
||||
_targetHeight = RenderHeight() < TargetHeight() ? TargetHeight() : RenderHeight();
|
||||
InParameters->Set(NVSDK_NGX_Parameter_OutWidth, _targetWidth);
|
||||
InParameters->Set(NVSDK_NGX_Parameter_OutHeight, _targetHeight);
|
||||
|
||||
// enable output scaling to restore image
|
||||
if (!Config::Instance()->DisplayResolution.value_or(false) && _targetWidth == RenderWidth())
|
||||
{
|
||||
Config::Instance()->OutputScalingMultiplier = 1.0f;
|
||||
Config::Instance()->OutputScalingEnabled = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
InParameters->Set(NVSDK_NGX_Parameter_Width, RenderWidth());
|
||||
InParameters->Set(NVSDK_NGX_Parameter_Height, RenderHeight());
|
||||
InParameters->Set(NVSDK_NGX_Parameter_OutWidth, TargetWidth());
|
||||
InParameters->Set(NVSDK_NGX_Parameter_OutHeight, TargetHeight());
|
||||
}
|
||||
|
||||
//if (Config::Instance()->ExtendedLimits.value_or(false))
|
||||
//{
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_Width, RenderWidth() < TargetWidth() ? TargetWidth() : RenderWidth());
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_Height, RenderHeight() < TargetHeight() ? TargetHeight() : RenderHeight());
|
||||
|
||||
// // if output scaling active let it to handle downsampling
|
||||
// if (Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false))
|
||||
// {
|
||||
// // update target res
|
||||
// _targetWidth = RenderWidth() < TargetWidth() ? TargetWidth() : RenderWidth();
|
||||
// _targetHeight = RenderHeight() < TargetHeight() ? TargetHeight() : RenderHeight();
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_OutWidth, _targetWidth);
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_OutHeight, _targetHeight);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_OutWidth, TargetWidth());
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_OutHeight, TargetHeight());
|
||||
// }
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_Width, RenderWidth());
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_Height, RenderHeight());
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_OutWidth, TargetWidth());
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_OutHeight, TargetHeight());
|
||||
//}
|
||||
|
||||
unsigned int RenderPresetDLAA = 0;
|
||||
unsigned int RenderPresetUltraQuality = 0;
|
||||
|
||||
@@ -152,10 +152,59 @@ void DLSSDFeature::ProcessInitParams(NVSDK_NGX_Parameter* InParameters)
|
||||
_targetHeight = DisplayHeight();
|
||||
}
|
||||
|
||||
InParameters->Set(NVSDK_NGX_Parameter_Width, RenderWidth());
|
||||
InParameters->Set(NVSDK_NGX_Parameter_Height, RenderHeight());
|
||||
InParameters->Set(NVSDK_NGX_Parameter_OutWidth, TargetWidth());
|
||||
InParameters->Set(NVSDK_NGX_Parameter_OutHeight, TargetHeight());
|
||||
// extended limits changes how resolution
|
||||
if (Config::Instance()->ExtendedLimits.value_or(false))
|
||||
{
|
||||
InParameters->Set(NVSDK_NGX_Parameter_Width, RenderWidth());
|
||||
InParameters->Set(NVSDK_NGX_Parameter_Height, RenderHeight());
|
||||
|
||||
_targetWidth = RenderWidth() < TargetWidth() ? TargetWidth() : RenderWidth();
|
||||
_targetHeight = RenderHeight() < TargetHeight() ? TargetHeight() : RenderHeight();
|
||||
InParameters->Set(NVSDK_NGX_Parameter_OutWidth, _targetWidth);
|
||||
InParameters->Set(NVSDK_NGX_Parameter_OutHeight, _targetHeight);
|
||||
|
||||
// enable output scaling to restore image
|
||||
if (!Config::Instance()->DisplayResolution.value_or(false) && _targetWidth == RenderWidth())
|
||||
{
|
||||
Config::Instance()->OutputScalingMultiplier = 1.0f;
|
||||
Config::Instance()->OutputScalingEnabled = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
InParameters->Set(NVSDK_NGX_Parameter_Width, RenderWidth());
|
||||
InParameters->Set(NVSDK_NGX_Parameter_Height, RenderHeight());
|
||||
InParameters->Set(NVSDK_NGX_Parameter_OutWidth, TargetWidth());
|
||||
InParameters->Set(NVSDK_NGX_Parameter_OutHeight, TargetHeight());
|
||||
}
|
||||
|
||||
//if (Config::Instance()->ExtendedLimits.value_or(false))
|
||||
//{
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_Width, RenderWidth() < TargetWidth() ? TargetWidth() : RenderWidth());
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_Height, RenderHeight() < TargetHeight() ? TargetHeight() : RenderHeight());
|
||||
|
||||
// // if output scaling active let it to handle downsampling
|
||||
// if (Config::Instance()->OutputScalingEnabled.value_or(false) && !Config::Instance()->DisplayResolution.value_or(false))
|
||||
// {
|
||||
// // update target res
|
||||
// _targetWidth = RenderWidth() < TargetWidth() ? TargetWidth() : RenderWidth();
|
||||
// _targetHeight = RenderHeight() < TargetHeight() ? TargetHeight() : RenderHeight();
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_OutWidth, _targetWidth);
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_OutHeight, _targetHeight);
|
||||
// }
|
||||
// else
|
||||
// {
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_OutWidth, TargetWidth());
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_OutHeight, TargetHeight());
|
||||
// }
|
||||
//}
|
||||
//else
|
||||
//{
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_Width, RenderWidth());
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_Height, RenderHeight());
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_OutWidth, TargetWidth());
|
||||
// InParameters->Set(NVSDK_NGX_Parameter_OutHeight, TargetHeight());
|
||||
//}
|
||||
|
||||
unsigned int RenderPresetDLAA = 0;
|
||||
unsigned int RenderPresetUltraQuality = 0;
|
||||
|
||||
@@ -215,8 +215,25 @@ bool XeSSFeature::InitXeSS(ID3D12Device* device, const NVSDK_NGX_Parameter* InPa
|
||||
_targetHeight = DisplayHeight();
|
||||
}
|
||||
|
||||
xessParams.outputResolution.x = TargetWidth();
|
||||
xessParams.outputResolution.y = TargetHeight();
|
||||
if (Config::Instance()->ExtendedLimits.value_or(false))
|
||||
{
|
||||
_targetWidth = RenderWidth() < TargetWidth() ? TargetWidth() : RenderWidth();
|
||||
_targetHeight = RenderHeight() < TargetHeight() ? TargetHeight() : RenderHeight();
|
||||
xessParams.outputResolution.x = _targetWidth;
|
||||
xessParams.outputResolution.y = _targetHeight;
|
||||
|
||||
// enable output scaling to restore image
|
||||
if (!Config::Instance()->DisplayResolution.value_or(false) && _targetWidth == RenderWidth())
|
||||
{
|
||||
Config::Instance()->OutputScalingMultiplier = 1.0f;
|
||||
Config::Instance()->OutputScalingEnabled = true;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
xessParams.outputResolution.x = TargetWidth();
|
||||
xessParams.outputResolution.y = TargetHeight();
|
||||
}
|
||||
|
||||
// create heaps to prevent create heap errors of xess
|
||||
if (Config::Instance()->CreateHeaps.value_or(true))
|
||||
|
||||
@@ -410,6 +410,8 @@ private:
|
||||
}
|
||||
else if (pfn_ClipCursor_hooked)
|
||||
{
|
||||
_ssRatio = 0;
|
||||
|
||||
if (_lastCursorLimit != nullptr)
|
||||
pfn_ClipCursor(nullptr);
|
||||
|
||||
@@ -1382,14 +1384,21 @@ public:
|
||||
|
||||
ImGui::SameLine(0.0f, 6.0f);
|
||||
|
||||
ImGui::Checkbox("Use FSR EASU", &_ssUseFsr);
|
||||
|
||||
ImGui::BeginDisabled(!_ssEnabled);
|
||||
ImGui::Checkbox("Use FSR 1", &_ssUseFsr);
|
||||
ImGui::EndDisabled();
|
||||
ShowHelpMarker("Use FSR 1's upscaling pass instead of bicubic");
|
||||
|
||||
ImGui::SameLine(0.0f, 6.0f);
|
||||
|
||||
if (ImGui::Button("Apply Change") &&
|
||||
(_ssEnabled != Config::Instance()->OutputScalingEnabled.value_or(false) ||
|
||||
bool applyEnabled = _ssEnabled != Config::Instance()->OutputScalingEnabled.value_or(false) ||
|
||||
_ssRatio != Config::Instance()->OutputScalingMultiplier.value_or(defaultRatio) ||
|
||||
_ssUseFsr != Config::Instance()->OutputScalingUseFsr.value_or(true)))
|
||||
_ssUseFsr != Config::Instance()->OutputScalingUseFsr.value_or(true);
|
||||
|
||||
ImGui::BeginDisabled(!applyEnabled);
|
||||
|
||||
if (ImGui::Button("Apply Change"))
|
||||
{
|
||||
Config::Instance()->OutputScalingEnabled = _ssEnabled;
|
||||
Config::Instance()->OutputScalingMultiplier = _ssRatio;
|
||||
@@ -1404,12 +1413,17 @@ public:
|
||||
Config::Instance()->changeBackend = true;
|
||||
}
|
||||
|
||||
ImGui::EndDisabled();
|
||||
|
||||
|
||||
ImGui::BeginDisabled(!_ssEnabled);
|
||||
ImGui::SliderFloat("Ratio", &_ssRatio, 0.5f, 3.0f, "%.2f");
|
||||
ImGui::EndDisabled();
|
||||
|
||||
if (cf != nullptr)
|
||||
ImGui::Text("%dx%d -> %dx%d", cf->RenderWidth(), cf->RenderHeight(), (uint32_t)(cf->DisplayWidth() * _ssRatio), (uint32_t)(cf->DisplayHeight() * _ssRatio));
|
||||
|
||||
ImGui::Text("Output Scaling is %s: %dx%d -> %dx%d", Config::Instance()->OutputScalingEnabled.value_or(false) ? "ENABLED" : "DISABLED",
|
||||
cf->RenderWidth(), cf->RenderHeight(), (uint32_t)(cf->DisplayWidth() * _ssRatio), (uint32_t)(cf->DisplayHeight() * _ssRatio));
|
||||
|
||||
ImGui::EndDisabled();
|
||||
}
|
||||
|
||||
@@ -1428,7 +1442,7 @@ public:
|
||||
"Positive values will make textures more blurry\n\n"
|
||||
"Has a small performance impact");
|
||||
|
||||
auto selectedAF = Config::Instance()->AnisotropyOverride.has_value() ? std::to_string(Config::Instance()->AnisotropyOverride.value()) : "Auto";
|
||||
auto selectedAF = Config::Instance()->AnisotropyOverride.has_value() ? std::to_string(Config::Instance()->AnisotropyOverride.value()) : "Auto";
|
||||
if (ImGui::BeginCombo("Force Anisotropy", selectedAF.c_str()))
|
||||
{
|
||||
if (ImGui::Selectable("Auto", !Config::Instance()->AnisotropyOverride.has_value()))
|
||||
@@ -1436,19 +1450,19 @@ public:
|
||||
|
||||
if (ImGui::Selectable("1", Config::Instance()->AnisotropyOverride.value_or(0) == 1))
|
||||
Config::Instance()->AnisotropyOverride = 1;
|
||||
|
||||
|
||||
if (ImGui::Selectable("2", Config::Instance()->AnisotropyOverride.value_or(0) == 2))
|
||||
Config::Instance()->AnisotropyOverride = 2;
|
||||
|
||||
|
||||
if (ImGui::Selectable("4", Config::Instance()->AnisotropyOverride.value_or(0) == 4))
|
||||
Config::Instance()->AnisotropyOverride = 4;
|
||||
|
||||
|
||||
if (ImGui::Selectable("8", Config::Instance()->AnisotropyOverride.value_or(0) == 8))
|
||||
Config::Instance()->AnisotropyOverride = 8;
|
||||
|
||||
|
||||
if (ImGui::Selectable("16", Config::Instance()->AnisotropyOverride.value_or(0) == 16))
|
||||
Config::Instance()->AnisotropyOverride = 16;
|
||||
|
||||
|
||||
ImGui::EndCombo();
|
||||
}
|
||||
|
||||
@@ -1804,7 +1818,7 @@ public:
|
||||
if (ImGui::Checkbox("Enable Advanced Settings", &advancedSettings))
|
||||
Config::Instance()->AdvancedSettings = advancedSettings;
|
||||
|
||||
if (advancedSettings)
|
||||
if (advancedSettings)
|
||||
{
|
||||
bool extendedLimits = Config::Instance()->ExtendedLimits.value_or(false);
|
||||
if (ImGui::Checkbox("Enable Extended Limits", &extendedLimits))
|
||||
@@ -1978,9 +1992,9 @@ public:
|
||||
|
||||
ImGui::EndDisabled();
|
||||
|
||||
if (ImGui::SliderFloat("Upscaler Ratio", &_mipmapUpscalerRatio,
|
||||
Config::Instance()->ExtendedLimits.value_or(false) ? 0.1f : 1.0f,
|
||||
Config::Instance()->ExtendedLimits.value_or(false) ? 6.0f : 3.0f,
|
||||
if (ImGui::SliderFloat("Upscaler Ratio", &_mipmapUpscalerRatio,
|
||||
Config::Instance()->ExtendedLimits.value_or(false) ? 0.1f : 1.0f,
|
||||
Config::Instance()->ExtendedLimits.value_or(false) ? 6.0f : 3.0f,
|
||||
"%.2f", ImGuiSliderFlags_NoRoundToFormat))
|
||||
{
|
||||
_renderWidth = _displayWidth / _mipmapUpscalerRatio;
|
||||
|
||||
Reference in New Issue
Block a user