From 8e20ba23580fa4a54f3b87193b2c925e7fb32ca9 Mon Sep 17 00:00:00 2001 From: FakeMichau <49685661+FakeMichau@users.noreply.github.com> Date: Sun, 31 May 2026 20:56:48 +0200 Subject: [PATCH] Avoid manually loading amdxc64 early --- OptiScaler/DllNames.h | 1 + OptiScaler/fsr4/FSR4Upgrade.cpp | 6 ++++-- OptiScaler/hooks/LibraryLoad_Hooks.cpp | 11 +++++++++++ 3 files changed, 16 insertions(+), 2 deletions(-) diff --git a/OptiScaler/DllNames.h b/OptiScaler/DllNames.h index e8477b3e..fee0080d 100644 --- a/OptiScaler/DllNames.h +++ b/OptiScaler/DllNames.h @@ -139,6 +139,7 @@ DEFINE_NAME_VECTORS(fsr2BE, "ffx_fsr2_api_dx12_x64"); DEFINE_NAME_VECTORS(fsr3, "ffx_fsr3upscaler_x64"); DEFINE_NAME_VECTORS(fsr3BE, "ffx_backend_dx12_x64"); +DEFINE_NAME_VECTORS(amdxc64, "amdxc64"); DEFINE_NAME_VECTORS(ffxDx12, "amd_fidelityfx_dx12", "amd_fidelityfx_loader_dx12"); DEFINE_NAME_VECTORS(ffxDx12Upscaler, "amd_fidelityfx_upscaler_dx12"); DEFINE_NAME_VECTORS(ffxDx12FG, "amd_fidelityfx_framegeneration_dx12"); diff --git a/OptiScaler/fsr4/FSR4Upgrade.cpp b/OptiScaler/fsr4/FSR4Upgrade.cpp index c7921ebe..a2f6204a 100644 --- a/OptiScaler/fsr4/FSR4Upgrade.cpp +++ b/OptiScaler/fsr4/FSR4Upgrade.cpp @@ -490,8 +490,10 @@ void InitFSR4Update() // For FSR4 Upgrade moduleAmdxc64 = KernelBaseProxy::GetModuleHandleW_()(L"amdxc64.dll"); - if (moduleAmdxc64 == nullptr) - moduleAmdxc64 = NtdllProxy::LoadLibraryExW_Ldr(L"amdxc64.dll", NULL, 0); + + // 007 First Light acts weird when it's loaded early + // if (moduleAmdxc64 == nullptr) + // moduleAmdxc64 = NtdllProxy::LoadLibraryExW_Ldr(L"amdxc64.dll", NULL, 0); if (moduleAmdxc64 != nullptr) { diff --git a/OptiScaler/hooks/LibraryLoad_Hooks.cpp b/OptiScaler/hooks/LibraryLoad_Hooks.cpp index 527d62f9..4105ef07 100644 --- a/OptiScaler/hooks/LibraryLoad_Hooks.cpp +++ b/OptiScaler/hooks/LibraryLoad_Hooks.cpp @@ -29,6 +29,7 @@ #include #include +#include // #define LOG_LIB_OPERATIONS @@ -470,6 +471,16 @@ HMODULE LibraryLoadHooks::LoadLibraryCheckW(std::wstring libName, LPCWSTR lpLibF return module; } + if (CheckDllNameW(&libName, &amdxc64NamesW)) + { + auto module = NtdllProxy::LoadLibraryExW_Ldr(libName.c_str(), NULL, 0); + + if (module != nullptr) + InitFSR4Update(); + + return module; + } + if (CheckDllNameW(&libName, &ffxDx12NamesW)) { if (FfxApiProxy::Dx12Module() != nullptr)