Skip to content

Commit 92d7e79

Browse files
committed
Correct a few more function signatures
1 parent 786b28d commit 92d7e79

File tree

10 files changed

+163
-83
lines changed

10 files changed

+163
-83
lines changed

OptiScaler/hooks/FG_Hooks.cpp

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -464,7 +464,7 @@ HRESULT FGHooks::hkSetFullscreenState(IDXGISwapChain* This, BOOL Fullscreen, IDX
464464
return result;
465465
}
466466

467-
HRESULT FGHooks::hkGetFullscreenDesc(IDXGISwapChain* This, DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pDesc)
467+
HRESULT FGHooks::hkGetFullscreenDesc(IDXGISwapChain1* This, DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pDesc)
468468
{
469469
auto result = o_FGSCGetFullscreenDesc(This, pDesc);
470470

@@ -705,7 +705,7 @@ HRESULT FGHooks::hkResizeBuffers(IDXGISwapChain* This, UINT BufferCount, UINT Wi
705705
return result;
706706
}
707707

708-
HRESULT FGHooks::hkResizeTarget(IDXGISwapChain* This, DXGI_MODE_DESC* pNewTargetParameters)
708+
HRESULT FGHooks::hkResizeTarget(IDXGISwapChain* This, const DXGI_MODE_DESC* pNewTargetParameters)
709709
{
710710
if (Config::Instance()->FGXeFGForceBorderless.value_or_default())
711711
{
@@ -724,7 +724,7 @@ HRESULT FGHooks::hkResizeTarget(IDXGISwapChain* This, DXGI_MODE_DESC* pNewTarget
724724
return o_FGSCResizeTarget(This, pNewTargetParameters);
725725
}
726726

727-
HRESULT FGHooks::hkResizeBuffers1(IDXGISwapChain* This, UINT BufferCount, UINT Width, UINT Height, DXGI_FORMAT Format,
727+
HRESULT FGHooks::hkResizeBuffers1(IDXGISwapChain3* This, UINT BufferCount, UINT Width, UINT Height, DXGI_FORMAT Format,
728728
UINT SwapChainFlags, const UINT* pCreationNodeMask, IUnknown* const* ppPresentQueue)
729729
{
730730
// Skip XeFG's internal call
@@ -941,7 +941,7 @@ HRESULT FGHooks::hkResizeBuffers1(IDXGISwapChain* This, UINT BufferCount, UINT W
941941
return result;
942942
}
943943

944-
HRESULT FGHooks::hkFGPresent(void* This, UINT SyncInterval, UINT Flags)
944+
HRESULT FGHooks::hkFGPresent(IDXGISwapChain* This, UINT SyncInterval, UINT Flags)
945945
{
946946
// Skip XeFG's internal call
947947
if (_skipPresent)
@@ -975,7 +975,7 @@ HRESULT FGHooks::hkFGPresent(void* This, UINT SyncInterval, UINT Flags)
975975
return result;
976976
}
977977

978-
HRESULT FGHooks::hkFGPresent1(void* This, UINT SyncInterval, UINT Flags,
978+
HRESULT FGHooks::hkFGPresent1(IDXGISwapChain1* This, UINT SyncInterval, UINT Flags,
979979
const DXGI_PRESENT_PARAMETERS* pPresentParameters)
980980
{
981981
// Skip XeFG's internal call
@@ -1009,7 +1009,8 @@ HRESULT FGHooks::hkFGPresent1(void* This, UINT SyncInterval, UINT Flags,
10091009
return result;
10101010
}
10111011

1012-
HRESULT FGHooks::FGPresent(void* This, UINT SyncInterval, UINT Flags, const DXGI_PRESENT_PARAMETERS* pPresentParameters)
1012+
HRESULT FGHooks::FGPresent(IDXGISwapChain* This, UINT SyncInterval, UINT Flags,
1013+
const DXGI_PRESENT_PARAMETERS* pPresentParameters)
10131014
{
10141015
_lastPresentFlags = Flags;
10151016

@@ -1018,7 +1019,7 @@ HRESULT FGHooks::FGPresent(void* This, UINT SyncInterval, UINT Flags, const DXGI
10181019
if (pPresentParameters == nullptr)
10191020
return o_FGSCPresent(This, SyncInterval, Flags);
10201021
else
1021-
return o_FGSCPresent1(This, SyncInterval, Flags, pPresentParameters);
1022+
return o_FGSCPresent1((IDXGISwapChain1*) This, SyncInterval, Flags, pPresentParameters);
10221023
}
10231024

10241025
auto willPresent = (Flags & DXGI_PRESENT_TEST) == 0;
@@ -1113,7 +1114,7 @@ HRESULT FGHooks::FGPresent(void* This, UINT SyncInterval, UINT Flags, const DXGI
11131114
if (pPresentParameters == nullptr)
11141115
result = o_FGSCPresent(This, SyncInterval, Flags);
11151116
else
1116-
result = o_FGSCPresent1(This, SyncInterval, Flags, pPresentParameters);
1117+
result = o_FGSCPresent1((IDXGISwapChain1*) This, SyncInterval, Flags, pPresentParameters);
11171118
LOG_DEBUG("Result: {:X}", result);
11181119

11191120
Hudfix_Dx12::PresentEnd();
@@ -1131,7 +1132,7 @@ HRESULT FGHooks::FGPresent(void* This, UINT SyncInterval, UINT Flags, const DXGI
11311132
return result;
11321133
}
11331134

1134-
HRESULT FGHooks::hkFGRelease(IDXGISwapChain* This)
1135+
HRESULT FGHooks::hkFGRelease(IUnknown* This)
11351136
{
11361137
// We already released this one, prevent crashes
11371138
if (This == oldSwapChain)
@@ -1191,7 +1192,7 @@ HRESULT FGHooks::hkFGRelease(IDXGISwapChain* This)
11911192
for (UINT i = 0; i < 8; i++)
11921193
{
11931194
ID3D12Resource* backBuffer = nullptr;
1194-
auto bbResult = This->GetBuffer(i, IID_PPV_ARGS(&backBuffer));
1195+
auto bbResult = ((IDXGISwapChain*) This)->GetBuffer(i, IID_PPV_ARGS(&backBuffer));
11951196

11961197
if (bbResult == S_OK)
11971198
{

OptiScaler/hooks/FG_Hooks.h

Lines changed: 31 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#include "SysUtils.h"
33
#include <dxgi1_6.h>
44

5+
#include "Hook_Utils.h"
6+
57
class FGHooks
68
{
79
public:
@@ -14,19 +16,15 @@ class FGHooks
1416
IDXGIOutput* pRestrictToOutput, IDXGISwapChain1** ppSwapChain);
1517

1618
private:
17-
typedef HRESULT (*PFN_Present)(void* This, UINT SyncInterval, UINT Flags);
18-
typedef HRESULT (*PFN_Present1)(void* This, UINT SyncInterval, UINT Flags,
19-
const DXGI_PRESENT_PARAMETERS* pPresentParameters);
20-
typedef HRESULT (*PFN_GetFullscreenDesc)(IDXGISwapChain* This, DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pDesc);
21-
typedef HRESULT (*PFN_SetFullscreenState)(IDXGISwapChain* This, BOOL Fullscreen, IDXGIOutput* pTarget);
22-
typedef HRESULT (*PFN_GetFullscreenState)(IDXGISwapChain* This, BOOL* pFullscreen, IDXGIOutput** ppTarget);
23-
typedef HRESULT (*PFN_ResizeBuffers)(IDXGISwapChain* This, UINT BufferCount, UINT Width, UINT Height,
24-
DXGI_FORMAT NewFormat, UINT SwapChainFlags);
25-
typedef HRESULT (*PFN_ResizeBuffers1)(IDXGISwapChain* This, UINT BufferCount, UINT Width, UINT Height,
26-
DXGI_FORMAT Format, UINT SwapChainFlags, const UINT* pCreationNodeMask,
27-
IUnknown* const* ppPresentQueue);
28-
typedef HRESULT (*PFN_ResizeTarget)(IDXGISwapChain* This, DXGI_MODE_DESC* pNewTargetParameters);
29-
typedef HRESULT (*PFN_Release)(IDXGISwapChain* This);
19+
using PFN_Present = rewrite_signature<decltype(&IDXGISwapChain::Present)>::type;
20+
using PFN_Present1 = rewrite_signature<decltype(&IDXGISwapChain1::Present1)>::type;
21+
using PFN_SetFullscreenState = rewrite_signature<decltype(&IDXGISwapChain::SetFullscreenState)>::type;
22+
using PFN_GetFullscreenState = rewrite_signature<decltype(&IDXGISwapChain::GetFullscreenState)>::type;
23+
using PFN_GetFullscreenDesc = rewrite_signature<decltype(&IDXGISwapChain1::GetFullscreenDesc)>::type;
24+
using PFN_ResizeBuffers = rewrite_signature<decltype(&IDXGISwapChain::ResizeBuffers)>::type;
25+
using PFN_ResizeBuffers1 = rewrite_signature<decltype(&IDXGISwapChain3::ResizeBuffers1)>::type;
26+
using PFN_ResizeTarget = rewrite_signature<decltype(&IDXGISwapChain::ResizeTarget)>::type;
27+
using PFN_Release = rewrite_signature<decltype(&IUnknown::Release)>::type;
3028

3129
inline static PFN_ResizeBuffers o_FGSCResizeBuffers = nullptr;
3230
inline static PFN_ResizeTarget o_FGSCResizeTarget = nullptr;
@@ -48,19 +46,31 @@ class FGHooks
4846
static void HookFGSwapchain(IDXGISwapChain* pSwapChain);
4947

5048
static HRESULT hkSetFullscreenState(IDXGISwapChain* This, BOOL Fullscreen, IDXGIOutput* pTarget);
51-
static HRESULT hkGetFullscreenDesc(IDXGISwapChain* This, DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pDesc);
49+
static HRESULT hkGetFullscreenDesc(IDXGISwapChain1* This, DXGI_SWAP_CHAIN_FULLSCREEN_DESC* pDesc);
5250
static HRESULT hkGetFullscreenState(IDXGISwapChain* This, BOOL* pFullscreen, IDXGIOutput** ppTarget);
5351
static HRESULT hkResizeBuffers(IDXGISwapChain* This, UINT BufferCount, UINT Width, UINT Height,
5452
DXGI_FORMAT NewFormat, UINT SwapChainFlags);
55-
static HRESULT hkResizeTarget(IDXGISwapChain* This, DXGI_MODE_DESC* pNewTargetParameters);
56-
static HRESULT hkResizeBuffers1(IDXGISwapChain* This, UINT BufferCount, UINT Width, UINT Height, DXGI_FORMAT Format,
57-
UINT SwapChainFlags, const UINT* pCreationNodeMask,
53+
static HRESULT hkResizeTarget(IDXGISwapChain* This, const DXGI_MODE_DESC* pNewTargetParameters);
54+
static HRESULT hkResizeBuffers1(IDXGISwapChain3* This, UINT BufferCount, UINT Width, UINT Height,
55+
DXGI_FORMAT Format, UINT SwapChainFlags, const UINT* pCreationNodeMask,
5856
IUnknown* const* ppPresentQueue);
59-
static HRESULT hkFGRelease(IDXGISwapChain* This);
57+
static HRESULT hkFGRelease(IUnknown* This);
6058

61-
static HRESULT hkFGPresent(void* This, UINT SyncInterval, UINT Flags);
62-
static HRESULT hkFGPresent1(void* This, UINT SyncInterval, UINT Flags,
59+
static HRESULT hkFGPresent(IDXGISwapChain* This, UINT SyncInterval, UINT Flags);
60+
static HRESULT hkFGPresent1(IDXGISwapChain1* This, UINT SyncInterval, UINT Flags,
6361
const DXGI_PRESENT_PARAMETERS* pPresentParameters);
64-
static HRESULT FGPresent(void* This, UINT SyncInterval, UINT Flags,
62+
static HRESULT FGPresent(IDXGISwapChain* This, UINT SyncInterval, UINT Flags,
6563
const DXGI_PRESENT_PARAMETERS* pPresentParameters);
64+
65+
VALIDATE_MEMBER_HOOK(hkFGPresent, PFN_Present)
66+
VALIDATE_MEMBER_HOOK(hkFGPresent1, PFN_Present1)
67+
VALIDATE_MEMBER_HOOK(hkSetFullscreenState, PFN_SetFullscreenState)
68+
VALIDATE_MEMBER_HOOK(hkGetFullscreenState, PFN_GetFullscreenState)
69+
VALIDATE_MEMBER_HOOK(hkGetFullscreenDesc, PFN_GetFullscreenDesc)
70+
VALIDATE_MEMBER_HOOK(hkResizeBuffers, PFN_ResizeBuffers)
71+
VALIDATE_MEMBER_HOOK(hkResizeBuffers1, PFN_ResizeBuffers1)
72+
VALIDATE_MEMBER_HOOK(hkResizeTarget, PFN_ResizeTarget)
73+
74+
// Don't understand why this is failing
75+
// VALIDATE_MEMBER_HOOK(hkFGRelease, PFN_Release)
6676
};

OptiScaler/hooks/Kernel_Hooks.cpp

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@
1515
#include <cwctype>
1616
#include <misc/IdentifyGpu.h>
1717

18+
#include "Hook_Utils.h"
19+
1820
#pragma intrinsic(_ReturnAddress)
1921

2022
static inline void NormalizePath(std::string& path)
@@ -84,6 +86,7 @@ static inline HMODULE CheckLoad(const std::wstring& name)
8486
return nullptr;
8587
}
8688

89+
VALIDATE_HOOK(hk_K32_GetProcAddress, Kernel32Proxy::PFN_GetProcAddress)
8790
FARPROC WINAPI KernelHooks::hk_K32_GetProcAddress(HMODULE hModule, LPCSTR lpProcName)
8891
{
8992

@@ -121,6 +124,7 @@ FARPROC WINAPI KernelHooks::hk_K32_GetProcAddress(HMODULE hModule, LPCSTR lpProc
121124
return o_K32_GetProcAddress(hModule, lpProcName);
122125
}
123126

127+
VALIDATE_HOOK(hk_K32_GetModuleHandleA, Kernel32Proxy::PFN_GetModuleHandleA)
124128
HMODULE WINAPI KernelHooks::hk_K32_GetModuleHandleA(LPCSTR lpModuleName)
125129
{
126130
if (lpModuleName != NULL)
@@ -154,6 +158,7 @@ HMODULE WINAPI KernelHooks::hk_K32_GetModuleHandleA(LPCSTR lpModuleName)
154158
return o_K32_GetModuleHandleA(lpModuleName);
155159
}
156160

161+
VALIDATE_HOOK(hk_K32_GetModuleHandleExW, Kernel32Proxy::PFN_GetModuleHandleExW)
157162
BOOL WINAPI KernelHooks::hk_K32_GetModuleHandleExW(DWORD dwFlags, LPCWSTR lpModuleName, HMODULE* phModule)
158163
{
159164
if (lpModuleName && dwFlags == GET_MODULE_HANDLE_EX_FLAG_PIN && lstrcmpW(L"nvapi64.dll", lpModuleName) == 0 &&
@@ -167,6 +172,7 @@ BOOL WINAPI KernelHooks::hk_K32_GetModuleHandleExW(DWORD dwFlags, LPCWSTR lpModu
167172
return o_K32_GetModuleHandleExW(dwFlags, lpModuleName, phModule);
168173
}
169174

175+
VALIDATE_HOOK(hk_KB_GetProcAddress, KernelBaseProxy::PFN_GetProcAddress)
170176
FARPROC WINAPI KernelHooks::hk_KB_GetProcAddress(HMODULE hModule, LPCSTR lpProcName)
171177
{
172178
if ((size_t) lpProcName < 0x000000000000F000)
@@ -191,6 +197,7 @@ FARPROC WINAPI KernelHooks::hk_KB_GetProcAddress(HMODULE hModule, LPCSTR lpProcN
191197
return o_KB_GetProcAddress(hModule, lpProcName);
192198
}
193199

200+
VALIDATE_HOOK(hk_K32_GetFileAttributesW, Kernel32Proxy::PFN_GetFileAttributesW)
194201
DWORD WINAPI KernelHooks::hk_K32_GetFileAttributesW(LPCWSTR lpFileName)
195202
{
196203
if (!State::Instance().nvngxExists && State::Instance().nvngxReplacement.has_value() &&
@@ -211,6 +218,7 @@ DWORD WINAPI KernelHooks::hk_K32_GetFileAttributesW(LPCWSTR lpFileName)
211218
return o_K32_GetFileAttributesW(lpFileName);
212219
}
213220

221+
VALIDATE_HOOK(hk_K32_CreateFileW, Kernel32Proxy::PFN_CreateFileW)
214222
HANDLE WINAPI KernelHooks::hk_K32_CreateFileW(LPCWSTR lpFileName, DWORD dwDesiredAccess, DWORD dwShareMode,
215223
LPSECURITY_ATTRIBUTES lpSecurityAttributes, DWORD dwCreationDisposition,
216224
DWORD dwFlagsAndAttributes, HANDLE hTemplateFile)
@@ -239,6 +247,7 @@ HANDLE WINAPI KernelHooks::hk_K32_CreateFileW(LPCWSTR lpFileName, DWORD dwDesire
239247

240248
// Load Library checks
241249

250+
VALIDATE_HOOK(hk_K32_LoadLibraryW, Kernel32Proxy::PFN_LoadLibraryW)
242251
HMODULE KernelHooks::hk_K32_LoadLibraryW(LPCWSTR lpLibFileName)
243252
{
244253
if (lpLibFileName == nullptr)
@@ -258,6 +267,7 @@ HMODULE KernelHooks::hk_K32_LoadLibraryW(LPCWSTR lpLibFileName)
258267
return o_K32_LoadLibraryW(lpLibFileName);
259268
}
260269

270+
VALIDATE_HOOK(hk_K32_LoadLibraryA, Kernel32Proxy::PFN_LoadLibraryA)
261271
HMODULE KernelHooks::hk_K32_LoadLibraryA(LPCSTR lpLibFileName)
262272
{
263273
if (lpLibFileName == nullptr)
@@ -278,6 +288,7 @@ HMODULE KernelHooks::hk_K32_LoadLibraryA(LPCSTR lpLibFileName)
278288
return o_K32_LoadLibraryA(lpLibFileName);
279289
}
280290

291+
VALIDATE_HOOK(hk_K32_LoadLibraryExW, Kernel32Proxy::PFN_LoadLibraryExW)
281292
HMODULE KernelHooks::hk_K32_LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
282293
{
283294
if (lpLibFileName == nullptr)
@@ -297,6 +308,7 @@ HMODULE KernelHooks::hk_K32_LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile,
297308
return o_K32_LoadLibraryExW(lpLibFileName, hFile, dwFlags);
298309
}
299310

311+
VALIDATE_HOOK(hk_K32_LoadLibraryExA, Kernel32Proxy::PFN_LoadLibraryExA)
300312
HMODULE KernelHooks::hk_K32_LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
301313
{
302314
if (lpLibFileName == nullptr)
@@ -317,6 +329,7 @@ HMODULE KernelHooks::hk_K32_LoadLibraryExA(LPCSTR lpLibFileName, HANDLE hFile, D
317329
return o_K32_LoadLibraryExA(lpLibFileName, hFile, dwFlags);
318330
}
319331

332+
VALIDATE_HOOK(hk_KB_LoadLibraryExW, KernelBaseProxy::PFN_LoadLibraryExW)
320333
HMODULE KernelHooks::hk_KB_LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, DWORD dwFlags)
321334
{
322335
if (lpLibFileName == nullptr)
@@ -336,6 +349,7 @@ HMODULE KernelHooks::hk_KB_LoadLibraryExW(LPCWSTR lpLibFileName, HANDLE hFile, D
336349
return o_KB_LoadLibraryExW(lpLibFileName, hFile, dwFlags);
337350
}
338351

352+
VALIDATE_HOOK(hk_K32_FreeLibrary, Kernel32Proxy::PFN_FreeLibrary)
339353
BOOL KernelHooks::hk_K32_FreeLibrary(HMODULE lpLibrary)
340354
{
341355
if (lpLibrary == nullptr)

OptiScaler/hooks/Reflex_Hooks.h

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,8 @@
22
#include <d3d12.h>
33
#include <nvapi/NvApiTypes.h>
44

5+
#include "Hook_Utils.h"
6+
57
enum TimingType : uint32_t
68
{
79
TimeRange, // in ns, value stored in length
@@ -60,6 +62,14 @@ class ReflexHooks
6062
static NvAPI_Status hkNvAPI_Vulkan_SetSleepMode(HANDLE vkDevice,
6163
NV_VULKAN_SET_SLEEP_MODE_PARAMS* pSetSleepModeParams);
6264

65+
VALIDATE_MEMBER_HOOK(hkNvAPI_D3D_SetSleepMode, decltype(&NvAPI_D3D_SetSleepMode))
66+
VALIDATE_MEMBER_HOOK(hkNvAPI_D3D_Sleep, decltype(&NvAPI_D3D_Sleep))
67+
VALIDATE_MEMBER_HOOK(hkNvAPI_D3D_GetLatency, decltype(&NvAPI_D3D_GetLatency))
68+
VALIDATE_MEMBER_HOOK(hkNvAPI_D3D_SetLatencyMarker, decltype(&NvAPI_D3D_SetLatencyMarker))
69+
VALIDATE_MEMBER_HOOK(hkNvAPI_D3D12_SetAsyncFrameMarker, decltype(&NvAPI_D3D12_SetAsyncFrameMarker))
70+
VALIDATE_MEMBER_HOOK(hkNvAPI_Vulkan_SetLatencyMarker, decltype(&NvAPI_Vulkan_SetLatencyMarker))
71+
VALIDATE_MEMBER_HOOK(hkNvAPI_Vulkan_SetSleepMode, decltype(&NvAPI_Vulkan_SetSleepMode))
72+
6373
public:
6474
static std::optional<TimingEntry> timingData[TimingType::TimingTypeCOUNT];
6575

0 commit comments

Comments
 (0)