added new mipmap override options

This commit is contained in:
cdozdil
2024-12-03 01:09:34 +03:00
parent aba15a9b67
commit 2cd80a0958
8 changed files with 151 additions and 31 deletions
+13
View File
@@ -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
View File
@@ -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;
+1 -1
View File
@@ -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>
+36 -16
View File
@@ -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);
+4
View File
@@ -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
+78 -11
View File
@@ -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());
+1 -1
View File
@@ -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
+13 -1
View File
@@ -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