From 9a021cac37edb681adbcf041837d1a52a6c00a68 Mon Sep 17 00:00:00 2001 From: cdozdil Date: Sat, 9 May 2026 02:13:00 +0300 Subject: [PATCH] Prevent FSR4update of custom FSR3.1 implementations --- OptiScaler/fsr4/FSR4Upgrade.cpp | 11 +++++++++++ 1 file changed, 11 insertions(+) diff --git a/OptiScaler/fsr4/FSR4Upgrade.cpp b/OptiScaler/fsr4/FSR4Upgrade.cpp index 217fc0c1..fe74008c 100644 --- a/OptiScaler/fsr4/FSR4Upgrade.cpp +++ b/OptiScaler/fsr4/FSR4Upgrade.cpp @@ -27,6 +27,8 @@ #undef FFX_API_CONFIGURE_FG_SWAPCHAIN_KEY_WAITCALLBACK #undef FFX_API_CONFIGURE_FG_SWAPCHAIN_KEY_FRAMEPACINGTUNING +#pragma intrinsic(_ReturnAddress) + static HMODULE moduleAmdxc64 = nullptr; static HMODULE moduleAmdxcffx64 = nullptr; @@ -231,6 +233,15 @@ struct AmdExtFfxApi : public IAmdExtFfxApi HRESULT STDMETHODCALLTYPE UpdateFfxApiProvider(void* pData, uint32_t dataSizeInBytes) override { + auto returnAddress = _ReturnAddress(); + auto callerModule = Util::GetCallerModule(returnAddress); + + if (callerModule == exeModule) + { + LOG_WARN("Called from game module, returning E_NOINTERFACE"); + return E_NOINTERFACE; + } + auto effectType = FfxApiProxy::GetType(reinterpret_cast(pData)->descType); auto effect = magic_enum::enum_name(effectType);