Skip to content

Commit a7f67e9

Browse files
committed
Fixed model selection for FSR 4.1
1 parent 0b8e7bd commit a7f67e9

File tree

1 file changed

+25
-1
lines changed

1 file changed

+25
-1
lines changed

OptiScaler/fsr4/FSR4ModelSelection.cpp

Lines changed: 25 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ void FSR4ModelSelection::Hook(HMODULE module, FSR4Source source)
157157
}
158158
}
159159

160-
// From amd_fidelityfx_upscaler_dx12 4.0.3.604
160+
// From amd_fidelityfx_upscaler_dx12 4.0.3.604 from FFX 2.1 SDK
161161
// Used by some versions of SDK and Driver
162162
const char* pattern403 =
163163
"48 89 5C 24 ? 55 56 57 41 54 41 55 41 56 41 57 48 8D AC 24 ? ? ? ? B8 ? ? ? ? E8 ? ? ? ? 48 2B E0 0F 29 B4 24 "
@@ -181,6 +181,30 @@ void FSR4ModelSelection::Hook(HMODULE module, FSR4Source source)
181181
else
182182
LOG_ERROR("Couldn't hook model selection");
183183
}
184+
185+
// From amd_fidelityfx_upscaler_dx12 4.1.0 from FFX 2.2 SDK
186+
const char* pattern410 = "48 8B C4 48 89 58 18 55 56 57 41 54 41 55 41 56 41 57 48 8D A8 28 F2 FF FF 48 81 EC A0 "
187+
"0E 00 00 0F 29 70 B8 0F 29 78 A8 48 8B ? ? ? ? ? 48 33 C4 48 89 85 78 0D 00 00 44 8B F2";
188+
189+
if (!o_createModelSDK && source == FSR4Source::SDK)
190+
{
191+
o_createModelSDK = (PFN_createModel) scanner::GetAddress(module, pattern410);
192+
193+
LOG_DEBUG("Hooking model selection, o_createModelSDK: {:X}", (uintptr_t) o_createModelSDK);
194+
195+
if (o_createModelSDK)
196+
{
197+
DetourTransactionBegin();
198+
DetourUpdateThread(GetCurrentThread());
199+
200+
DetourAttach(&(PVOID&) o_createModelSDK, hkcreateModelSDK);
201+
202+
DetourTransactionCommit();
203+
}
204+
else
205+
LOG_ERROR("Couldn't hook model selection");
206+
}
207+
184208
else if (!o_createModelDriver && source == FSR4Source::DriverDll)
185209
{
186210
o_createModelDriver = (PFN_createModel) scanner::GetAddress(module, pattern403);

0 commit comments

Comments
 (0)