@@ -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