mirror of
https://github.com/optiscaler/OptiScaler.git
synced 2026-09-23 05:46:27 +00:00
added new mipmap override options
This commit is contained in:
@@ -442,6 +442,15 @@ bool Config::Reload(std::filesystem::path iniPath)
|
||||
if (MipmapBiasOverride.has_value() && (MipmapBiasOverride.value() > 15.0 || MipmapBiasOverride.value() < -15.0))
|
||||
MipmapBiasOverride.reset();
|
||||
|
||||
if (!MipmapBiasFixedOverride.has_value())
|
||||
MipmapBiasFixedOverride = readBool("Hotfix", "MipmapBiasFixedOverride");
|
||||
|
||||
if (!MipmapBiasScaleOverride.has_value())
|
||||
MipmapBiasScaleOverride = readBool("Hotfix", "MipmapBiasScaleOverride");
|
||||
|
||||
if (!MipmapBiasOverrideAll.has_value())
|
||||
MipmapBiasOverrideAll = readBool("Hotfix", "MipmapBiasOverrideAll");
|
||||
|
||||
if (!AnisotropyOverride.has_value())
|
||||
AnisotropyOverride = readInt("Hotfix", "AnisotropyOverride");
|
||||
|
||||
@@ -830,6 +839,10 @@ bool Config::SaveIni()
|
||||
// Hotfixes
|
||||
{
|
||||
ini.SetValue("Hotfix", "MipmapBiasOverride", GetFloatValue(Instance()->MipmapBiasOverride).c_str());
|
||||
ini.SetValue("Hotfix", "MipmapBiasOverrideAll", GetBoolValue(Instance()->MipmapBiasOverrideAll).c_str());
|
||||
ini.SetValue("Hotfix", "MipmapBiasFixedOverride", GetBoolValue(Instance()->MipmapBiasFixedOverride).c_str());
|
||||
ini.SetValue("Hotfix", "MipmapBiasScaleOverride", GetBoolValue(Instance()->MipmapBiasScaleOverride).c_str());
|
||||
|
||||
ini.SetValue("Hotfix", "AnisotropyOverride", GetIntValue(Instance()->AnisotropyOverride).c_str());
|
||||
ini.SetValue("Hotfix", "RoundInternalResolution", GetIntValue(Instance()->RoundInternalResolution).c_str());
|
||||
|
||||
|
||||
+5
-1
@@ -97,6 +97,9 @@ public:
|
||||
|
||||
//Hotfixes
|
||||
std::optional<float> MipmapBiasOverride;
|
||||
std::optional<bool> MipmapBiasFixedOverride;
|
||||
std::optional<bool> MipmapBiasScaleOverride;
|
||||
std::optional<bool> MipmapBiasOverrideAll;
|
||||
std::optional<int> AnisotropyOverride;
|
||||
std::optional<int> RoundInternalResolution;
|
||||
|
||||
@@ -227,7 +230,8 @@ public:
|
||||
// XeSS debug stuff
|
||||
bool xessDebug = false;
|
||||
int xessDebugFrames = 5;
|
||||
float lastMipBias = 0.0f;
|
||||
float lastMipBias = 100.0f;
|
||||
float lastMipBiasMax = -100.0f;
|
||||
|
||||
// dlss hook
|
||||
bool upscalerDisableHook = false;
|
||||
|
||||
@@ -82,7 +82,7 @@
|
||||
<IncludePath>$(SolutionDir)external\vulkan\include;$(SolutionDir)external\nvngx_dlss_sdk;$(SolutionDir)external\xess\inc\xess;$(SolutionDir)external\FidelityFX-SDK\ffx-api\include\ffx_api;$(SolutionDir)external\simpleini;$(SolutionDir)external\unordered_dense\include;$(SolutionDir)external\spdlog\include;$(SolutionDir)external\freetype;$(IncludePath)</IncludePath>
|
||||
<LibraryPath>$(ProjectDir)fsr2\lib;$(ProjectDir)fsr2_212\lib;$(ProjectDir)fsr31\lib;$(ProjectDir)vulkan;$(ProjectDir)d3dx;$(ProjectDir)detours;$(SolutionDir)external\xess\lib;$(SolutionDir)external\freetype;$(LibraryPath)</LibraryPath>
|
||||
<TargetName>dxgi</TargetName>
|
||||
<OutDir>D:\Folders\Games\SteamLibrary\steamapps\common\Nobody Wants to Die\detnoir\Binaries\Win64\</OutDir>
|
||||
<OutDir>E:\Games\Deep Rock Galactic\FSD\Binaries\Win64\</OutDir>
|
||||
<IntDir>.\x64\Debug</IntDir>
|
||||
<TargetExt>.dll</TargetExt>
|
||||
</PropertyGroup>
|
||||
|
||||
@@ -961,7 +961,7 @@ static void hkCreateRenderTargetView(ID3D12Device* This, ID3D12Resource* pResour
|
||||
{
|
||||
std::unique_lock<std::shared_mutex> lock(resourceMutex);
|
||||
fgHandlesByResources.insert_or_assign(pResource, info);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef DETAILED_DEBUG_LOGS
|
||||
@@ -1014,7 +1014,7 @@ static void hkCreateShaderResourceView(ID3D12Device* This, ID3D12Resource* pReso
|
||||
{
|
||||
std::unique_lock<std::shared_mutex> lock(resourceMutex);
|
||||
fgHandlesByResources.insert_or_assign(pResource, info);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef DETAILED_DEBUG_LOGS
|
||||
@@ -1066,7 +1066,7 @@ static void hkCreateUnorderedAccessView(ID3D12Device* This, ID3D12Resource* pRes
|
||||
{
|
||||
std::unique_lock<std::shared_mutex> lock(resourceMutex);
|
||||
fgHandlesByResources.insert_or_assign(pResource, info);
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef DETAILED_DEBUG_LOGS
|
||||
@@ -3282,7 +3282,7 @@ static HRESULT hkD3D12CreateDevice(IDXGIAdapter* pAdapter, D3D_FEATURE_LEVEL Min
|
||||
LOG_WARN("GPU Based Validation active!");
|
||||
debugController->SetEnableGPUBasedValidation(TRUE);
|
||||
#endif
|
||||
}
|
||||
}
|
||||
#endif
|
||||
|
||||
Config::Instance()->dxgiSkipSpoofing = true;
|
||||
@@ -3320,9 +3320,9 @@ static HRESULT hkD3D12CreateDevice(IDXGIAdapter* pAdapter, D3D_FEATURE_LEVEL Min
|
||||
LOG_DEBUG("infoQueue1 accuired, registering MessageCallback");
|
||||
res = infoQueue1->RegisterMessageCallback(D3D12DebugCallback, D3D12_MESSAGE_CALLBACK_IGNORE_FILTERS, NULL, NULL);
|
||||
}
|
||||
}
|
||||
}
|
||||
#endif
|
||||
}
|
||||
}
|
||||
|
||||
LOG_FUNC_RESULT(result);
|
||||
|
||||
@@ -3349,7 +3349,7 @@ static void hkCreateSampler(ID3D12Device* device, const D3D12_SAMPLER_DESC* pDes
|
||||
(pDesc->Filter == D3D12_FILTER_MIN_LINEAR_MAG_MIP_POINT || pDesc->Filter == D3D12_FILTER_MIN_MAG_LINEAR_MIP_POINT ||
|
||||
pDesc->Filter == D3D12_FILTER_MIN_MAG_MIP_LINEAR || pDesc->Filter == D3D12_FILTER_ANISOTROPIC))
|
||||
{
|
||||
LOG_INFO("Overriding Anisotrpic ({2}) filtering {0} -> {1}", pDesc->MaxAnisotropy, Config::Instance()->AnisotropyOverride.value(), (UINT)pDesc->Filter);
|
||||
LOG_DEBUG("Overriding Anisotrpic ({2}) filtering {0} -> {1}", pDesc->MaxAnisotropy, Config::Instance()->AnisotropyOverride.value(), (UINT)pDesc->Filter);
|
||||
newDesc.Filter = D3D12_FILTER_ANISOTROPIC;
|
||||
newDesc.MaxAnisotropy = Config::Instance()->AnisotropyOverride.value();
|
||||
}
|
||||
@@ -3363,15 +3363,25 @@ static void hkCreateSampler(ID3D12Device* device, const D3D12_SAMPLER_DESC* pDes
|
||||
newDesc.MinLOD = pDesc->MinLOD;
|
||||
newDesc.MipLODBias = pDesc->MipLODBias;
|
||||
|
||||
if (newDesc.MipLODBias < 0.0f)
|
||||
if (newDesc.MipLODBias < 0.0f || Config::Instance()->MipmapBiasOverrideAll.value_or(false))
|
||||
{
|
||||
if (Config::Instance()->MipmapBiasOverride.has_value())
|
||||
{
|
||||
LOG_INFO("Overriding mipmap bias {0} -> {1}", pDesc->MipLODBias, Config::Instance()->MipmapBiasOverride.value());
|
||||
newDesc.MipLODBias = Config::Instance()->MipmapBiasOverride.value();
|
||||
LOG_DEBUG("Overriding mipmap bias {0} -> {1}", pDesc->MipLODBias, Config::Instance()->MipmapBiasOverride.value());
|
||||
|
||||
if (Config::Instance()->MipmapBiasFixedOverride.value_or(false))
|
||||
newDesc.MipLODBias = Config::Instance()->MipmapBiasOverride.value();
|
||||
else if (Config::Instance()->MipmapBiasScaleOverride.value_or(false))
|
||||
newDesc.MipLODBias = newDesc.MipLODBias * Config::Instance()->MipmapBiasOverride.value();
|
||||
else
|
||||
newDesc.MipLODBias = newDesc.MipLODBias + Config::Instance()->MipmapBiasOverride.value();
|
||||
}
|
||||
|
||||
Config::Instance()->lastMipBias = newDesc.MipLODBias;
|
||||
if (Config::Instance()->lastMipBiasMax < newDesc.MipLODBias)
|
||||
Config::Instance()->lastMipBiasMax = newDesc.MipLODBias;
|
||||
|
||||
if (Config::Instance()->lastMipBias > newDesc.MipLODBias)
|
||||
Config::Instance()->lastMipBias = newDesc.MipLODBias;
|
||||
}
|
||||
|
||||
return o_CreateSampler(device, &newDesc, DestDescriptor);
|
||||
@@ -3406,7 +3416,7 @@ static HRESULT hkCreateSamplerState(ID3D11Device* This, const D3D11_SAMPLER_DESC
|
||||
pSamplerDesc->Filter == D3D11_FILTER_MIN_MAG_MIP_LINEAR ||
|
||||
pSamplerDesc->Filter == D3D11_FILTER_ANISOTROPIC))
|
||||
{
|
||||
LOG_INFO("Overriding Anisotrpic ({2}) filtering {0} -> {1}", pSamplerDesc->MaxAnisotropy, Config::Instance()->AnisotropyOverride.value(), (UINT)pSamplerDesc->Filter);
|
||||
LOG_DEBUG("Overriding Anisotrpic ({2}) filtering {0} -> {1}", pSamplerDesc->MaxAnisotropy, Config::Instance()->AnisotropyOverride.value(), (UINT)pSamplerDesc->Filter);
|
||||
newDesc.Filter = D3D11_FILTER_ANISOTROPIC;
|
||||
newDesc.MaxAnisotropy = Config::Instance()->AnisotropyOverride.value();
|
||||
}
|
||||
@@ -3418,15 +3428,25 @@ static HRESULT hkCreateSamplerState(ID3D11Device* This, const D3D11_SAMPLER_DESC
|
||||
|
||||
newDesc.MipLODBias = pSamplerDesc->MipLODBias;
|
||||
|
||||
if (newDesc.MipLODBias < 0.0f)
|
||||
if (newDesc.MipLODBias < 0.0f || Config::Instance()->MipmapBiasOverrideAll.value_or(false))
|
||||
{
|
||||
if (Config::Instance()->MipmapBiasOverride.has_value())
|
||||
{
|
||||
LOG_INFO("Overriding mipmap bias {0} -> {1}", pSamplerDesc->MipLODBias, Config::Instance()->MipmapBiasOverride.value());
|
||||
newDesc.MipLODBias = Config::Instance()->MipmapBiasOverride.value();
|
||||
LOG_DEBUG("Overriding mipmap bias {0} -> {1}", pSamplerDesc->MipLODBias, Config::Instance()->MipmapBiasOverride.value());
|
||||
|
||||
if (Config::Instance()->MipmapBiasFixedOverride.value_or(false))
|
||||
newDesc.MipLODBias = Config::Instance()->MipmapBiasOverride.value();
|
||||
else if (Config::Instance()->MipmapBiasScaleOverride.value_or(false))
|
||||
newDesc.MipLODBias = newDesc.MipLODBias * Config::Instance()->MipmapBiasOverride.value();
|
||||
else
|
||||
newDesc.MipLODBias = newDesc.MipLODBias + Config::Instance()->MipmapBiasOverride.value();
|
||||
}
|
||||
|
||||
Config::Instance()->lastMipBias = newDesc.MipLODBias;
|
||||
if (Config::Instance()->lastMipBiasMax < newDesc.MipLODBias)
|
||||
Config::Instance()->lastMipBiasMax = newDesc.MipLODBias;
|
||||
|
||||
if (Config::Instance()->lastMipBias > newDesc.MipLODBias)
|
||||
Config::Instance()->lastMipBias = newDesc.MipLODBias;
|
||||
}
|
||||
|
||||
return o_CreateSamplerState(This, &newDesc, ppSamplerState);
|
||||
|
||||
@@ -145,6 +145,8 @@ HRESULT WrappedIDXGISwapChain4::ResizeBuffers(UINT BufferCount, UINT Width, UINT
|
||||
{
|
||||
Config::Instance()->ScreenWidth = Width;
|
||||
Config::Instance()->ScreenHeight = Height;
|
||||
Config::Instance()->lastMipBias = 100.0f;
|
||||
Config::Instance()->lastMipBiasMax = -100.0f;
|
||||
}
|
||||
|
||||
// Crude implementation of EndlesslyFlowering's AutoHDR-ReShade
|
||||
@@ -258,6 +260,8 @@ HRESULT WrappedIDXGISwapChain4::ResizeBuffers1(UINT BufferCount, UINT Width, UIN
|
||||
{
|
||||
Config::Instance()->ScreenWidth = Width;
|
||||
Config::Instance()->ScreenHeight = Height;
|
||||
Config::Instance()->lastMipBias = 100.0f;
|
||||
Config::Instance()->lastMipBiasMax = -100.0f;
|
||||
}
|
||||
|
||||
// Crude implementation of EndlesslyFlowering's AutoHDR-ReShade
|
||||
|
||||
@@ -286,7 +286,7 @@ LRESULT ImGuiCommon::WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
|
||||
//LOG_TRACE("msg: {:X}, wParam: {:X}, lParam: {:X}", msg, wParam, lParam);
|
||||
|
||||
if (!Config::Instance()->IsShuttingDown &&
|
||||
if (!Config::Instance()->IsShuttingDown &&
|
||||
(msg == WM_QUIT || msg == WM_CLOSE || msg == WM_DESTROY || /* classic messages but they are a bit late to capture */
|
||||
(msg == WM_SYSCOMMAND && wParam == SC_CLOSE /* window close*/)))
|
||||
{
|
||||
@@ -331,11 +331,11 @@ LRESULT ImGuiCommon::WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam)
|
||||
if (rawData.header.dwType == RIM_TYPEKEYBOARD && rawData.data.keyboard.VKey != 0)
|
||||
inputMenu = rawData.data.keyboard.VKey == Config::Instance()->ShortcutKey.value_or(VK_INSERT);
|
||||
}
|
||||
else
|
||||
else
|
||||
{
|
||||
inputMenu = msg == WM_KEYDOWN && wParam == Config::Instance()->ShortcutKey.value_or(VK_INSERT);
|
||||
}
|
||||
|
||||
|
||||
// INSERT - OPEN MENU
|
||||
if (inputMenu)
|
||||
{
|
||||
@@ -1629,19 +1629,68 @@ void ImGuiCommon::RenderMenu()
|
||||
"Positive values will make textures more blurry\n\n"
|
||||
"Has a small performance impact");
|
||||
|
||||
ImGui::BeginDisabled(!Config::Instance()->MipmapBiasOverride.has_value());
|
||||
{
|
||||
ImGui::BeginDisabled(Config::Instance()->MipmapBiasScaleOverride.has_value() && Config::Instance()->MipmapBiasScaleOverride.value());
|
||||
{
|
||||
bool mbFixed = Config::Instance()->MipmapBiasFixedOverride.value_or(false);
|
||||
if (ImGui::Checkbox("MB Fixed Override", &mbFixed))
|
||||
{
|
||||
Config::Instance()->MipmapBiasScaleOverride.reset();
|
||||
Config::Instance()->MipmapBiasFixedOverride = mbFixed;
|
||||
}
|
||||
|
||||
ShowHelpMarker("Apply same override value to all textures");
|
||||
}
|
||||
ImGui::EndDisabled();
|
||||
|
||||
ImGui::SameLine(0.0f, 6.0f);
|
||||
|
||||
ImGui::BeginDisabled(Config::Instance()->MipmapBiasFixedOverride.has_value() && Config::Instance()->MipmapBiasFixedOverride.value());
|
||||
{
|
||||
bool mbScale = Config::Instance()->MipmapBiasScaleOverride.value_or(false);
|
||||
if (ImGui::Checkbox("MB Scale Override", &mbScale))
|
||||
{
|
||||
Config::Instance()->MipmapBiasFixedOverride.reset();
|
||||
Config::Instance()->MipmapBiasScaleOverride = mbScale;
|
||||
}
|
||||
|
||||
ShowHelpMarker("Apply override value as scale multiplier\n"
|
||||
"When using scale mode please use positive\n"
|
||||
"override values to increase sharpness!");
|
||||
}
|
||||
ImGui::EndDisabled();
|
||||
|
||||
bool mbAll = Config::Instance()->MipmapBiasOverrideAll.value_or(false);
|
||||
if (ImGui::Checkbox("MB Override All Textures", &mbAll))
|
||||
Config::Instance()->MipmapBiasOverrideAll = mbAll;
|
||||
|
||||
ShowHelpMarker("Apply override value as scale multiplier\n"
|
||||
"When using scale mode please use positive\n"
|
||||
"override values to increase sharpness!");
|
||||
}
|
||||
ImGui::EndDisabled();
|
||||
|
||||
ImGui::BeginDisabled(Config::Instance()->MipmapBiasOverride.has_value() && Config::Instance()->MipmapBiasOverride.value() == _mipBias);
|
||||
if (ImGui::Button("Set"))
|
||||
Config::Instance()->MipmapBiasOverride = _mipBias;
|
||||
{
|
||||
if (ImGui::Button("Set"))
|
||||
{
|
||||
Config::Instance()->MipmapBiasOverride = _mipBias;
|
||||
Config::Instance()->lastMipBias = 100.0f;
|
||||
Config::Instance()->lastMipBiasMax = -100.0f;
|
||||
}
|
||||
}
|
||||
ImGui::EndDisabled();
|
||||
|
||||
ImGui::SameLine(0.0f, 6.0f);
|
||||
|
||||
ImGui::BeginDisabled(!Config::Instance()->MipmapBiasOverride.has_value());
|
||||
if (ImGui::Button("Reset"))
|
||||
{
|
||||
Config::Instance()->MipmapBiasOverride.reset();
|
||||
_mipBias = 0.0f;
|
||||
if (ImGui::Button("Reset"))
|
||||
{
|
||||
Config::Instance()->MipmapBiasOverride.reset();
|
||||
_mipBias = 0.0f;
|
||||
}
|
||||
}
|
||||
ImGui::EndDisabled();
|
||||
|
||||
@@ -1654,13 +1703,31 @@ void ImGuiCommon::RenderMenu()
|
||||
}
|
||||
|
||||
if (Config::Instance()->MipmapBiasOverride.has_value())
|
||||
ImGui::Text("Current : %.6f, Target: %.6f", Config::Instance()->lastMipBias, Config::Instance()->MipmapBiasOverride.value());
|
||||
{
|
||||
if (Config::Instance()->MipmapBiasFixedOverride.value_or(false))
|
||||
{
|
||||
ImGui::Text("Current : %.3f / %.3f, Target: %.3f",
|
||||
Config::Instance()->lastMipBias, Config::Instance()->lastMipBiasMax, Config::Instance()->MipmapBiasOverride.value());
|
||||
}
|
||||
else if (Config::Instance()->MipmapBiasScaleOverride.value_or(false))
|
||||
{
|
||||
ImGui::Text("Current : %.3f / %.3f, Target: Base * %.3f",
|
||||
Config::Instance()->lastMipBias, Config::Instance()->lastMipBiasMax, Config::Instance()->MipmapBiasOverride.value());
|
||||
}
|
||||
else
|
||||
{
|
||||
ImGui::Text("Current : %.3f / %.3f, Target: Base + %.3f",
|
||||
Config::Instance()->lastMipBias, Config::Instance()->lastMipBiasMax, Config::Instance()->MipmapBiasOverride.value());
|
||||
}
|
||||
}
|
||||
else
|
||||
ImGui::Text("Current : %.6f", Config::Instance()->lastMipBias);
|
||||
{
|
||||
ImGui::Text("Current : %.3f / %.3f", Config::Instance()->lastMipBias, Config::Instance()->lastMipBiasMax);
|
||||
}
|
||||
|
||||
ImGui::Text("Will be applied after RESOLUTION or PRESENT change !!!");
|
||||
|
||||
// MIPMAP BIAS & Anisotropy -----------------------------
|
||||
// Anisotropy Override -----------------------------
|
||||
ImGui::SeparatorText("Anisotropic Filtering (DirectX)");
|
||||
|
||||
ImGui::PushItemWidth(65.0f * Config::Instance()->MenuScale.value());
|
||||
|
||||
@@ -21,7 +21,7 @@
|
||||
#define VER_MAJOR_VERSION 0
|
||||
#define VER_MINOR_VERSION 7
|
||||
#define VER_HOTFIX_VERSION 0
|
||||
#define VER_BUILD_NUMBER 69
|
||||
#define VER_BUILD_NUMBER 70
|
||||
|
||||
#define VER_PRE_RELEASE
|
||||
|
||||
|
||||
@@ -547,10 +547,22 @@ UseHDR10=auto
|
||||
; -------------------------------------------------------
|
||||
[Hotfix]
|
||||
; -------------------------------------------------------
|
||||
; Override mipmap lod bias for textures
|
||||
; Override value for mipmap lod bias
|
||||
; -15.0 - 15.0 - Default (auto) is disabled
|
||||
MipmapBiasOverride=auto
|
||||
|
||||
; Use a fixed value for lod bias
|
||||
; true or false - Default (auto) is false
|
||||
MipmapBiasFixedOverride=auto
|
||||
|
||||
; Use override value as scale multiplier
|
||||
; true or false - Default (auto) is false
|
||||
MipmapBiasScaleOverride=auto
|
||||
|
||||
; Override all textures lod bias (normally only overriding < 0 values)
|
||||
; true or false - Default (auto) is false
|
||||
MipmapBiasOverrideAll=auto
|
||||
|
||||
; Override max anisotropy for textures
|
||||
; 2, 4, 8, 16 - Default (auto) is disabled
|
||||
AnisotropyOverride=auto
|
||||
|
||||
Reference in New Issue
Block a user