1
0
mirror of https://github.com/narzoul/DDrawCompat synced 2024-12-30 08:55:36 +01:00

Moved DLL related parts to Dll namespace and subdirectory

This commit is contained in:
narzoul 2016-09-03 16:57:10 +02:00
parent 7fc059a02f
commit b8832a92be
19 changed files with 88 additions and 87 deletions

View File

@ -7,7 +7,7 @@
#include "Common/Hook.h" #include "Common/Hook.h"
#include "Common/Log.h" #include "Common/Log.h"
#include "Common/VtableVisitor.h" #include "Common/VtableVisitor.h"
#include "DDrawProcs.h" #include "DDraw/ScopedThreadLock.h"
template <typename Interface> template <typename Interface>
using Vtable = typename std::remove_pointer<decltype(Interface::lpVtbl)>::type; using Vtable = typename std::remove_pointer<decltype(Interface::lpVtbl)>::type;
@ -109,7 +109,7 @@ private:
template <typename MemberDataPtr, MemberDataPtr ptr, typename Result, typename... Params> template <typename MemberDataPtr, MemberDataPtr ptr, typename Result, typename... Params>
static Result STDMETHODCALLTYPE threadSafeFunc(Params... params) static Result STDMETHODCALLTYPE threadSafeFunc(Params... params)
{ {
Compat::origProcs.AcquireDDThreadLock(); DDraw::ScopedThreadLock lock;
#ifdef _DEBUG #ifdef _DEBUG
Compat::LogEnter(s_funcNames[getKey<MemberDataPtr, ptr>()].c_str(), params...); Compat::LogEnter(s_funcNames[getKey<MemberDataPtr, ptr>()].c_str(), params...);
#endif #endif
@ -119,14 +119,13 @@ private:
#ifdef _DEBUG #ifdef _DEBUG
Compat::LogLeave(s_funcNames[getKey<MemberDataPtr, ptr>()].c_str(), params...) << result; Compat::LogLeave(s_funcNames[getKey<MemberDataPtr, ptr>()].c_str(), params...) << result;
#endif #endif
Compat::origProcs.ReleaseDDThreadLock();
return result; return result;
} }
template <typename MemberDataPtr, MemberDataPtr ptr, typename... Params> template <typename MemberDataPtr, MemberDataPtr ptr, typename... Params>
static void STDMETHODCALLTYPE threadSafeFunc(Params... params) static void STDMETHODCALLTYPE threadSafeFunc(Params... params)
{ {
Compat::origProcs.AcquireDDThreadLock(); DDraw::ScopedThreadLock lock;
#ifdef _DEBUG #ifdef _DEBUG
Compat::LogEnter(s_funcNames[getKey<MemberDataPtr, ptr>()].c_str(), params...); Compat::LogEnter(s_funcNames[getKey<MemberDataPtr, ptr>()].c_str(), params...);
#endif #endif
@ -136,7 +135,6 @@ private:
#ifdef _DEBUG #ifdef _DEBUG
Compat::LogLeave(s_funcNames[getKey<MemberDataPtr, ptr>()].c_str(), params...); Compat::LogLeave(s_funcNames[getKey<MemberDataPtr, ptr>()].c_str(), params...);
#endif #endif
Compat::origProcs.ReleaseDDThreadLock();
} }
const Vtable<Interface>& m_origVtable; const Vtable<Interface>& m_origVtable;

View File

@ -9,7 +9,6 @@
#include "DDraw/IReleaseNotifier.h" #include "DDraw/IReleaseNotifier.h"
#include "DDraw/RealPrimarySurface.h" #include "DDraw/RealPrimarySurface.h"
#include "DDraw/Repository.h" #include "DDraw/Repository.h"
#include "DDrawProcs.h"
#include "Gdi/Gdi.h" #include "Gdi/Gdi.h"
namespace namespace

View File

@ -2,7 +2,7 @@
#include "Common/Hook.h" #include "Common/Hook.h"
#include "DDraw/DisplayMode.h" #include "DDraw/DisplayMode.h"
#include "DDraw/Repository.h" #include "DDraw/Repository.h"
#include "DDrawProcs.h" #include "Dll/Procs.h"
namespace namespace
{ {
@ -142,7 +142,7 @@ namespace
{ {
if (g_compatibleDc) if (g_compatibleDc)
{ {
Compat::origProcs.AcquireDDThreadLock(); Dll::g_origProcs.AcquireDDThreadLock();
g_compatibleSurface->ReleaseDC(g_compatibleSurface, g_compatibleDc); g_compatibleSurface->ReleaseDC(g_compatibleSurface, g_compatibleDc);
g_compatibleDc = nullptr; g_compatibleDc = nullptr;
g_compatibleSurface.release(); g_compatibleSurface.release();
@ -165,7 +165,7 @@ namespace
if (g_compatibleSurface && if (g_compatibleSurface &&
SUCCEEDED(g_compatibleSurface->GetDC(g_compatibleSurface, &g_compatibleDc))) SUCCEEDED(g_compatibleSurface->GetDC(g_compatibleSurface, &g_compatibleDc)))
{ {
Compat::origProcs.ReleaseDDThreadLock(); Dll::g_origProcs.ReleaseDDThreadLock();
} }
} }
} }

View File

@ -12,6 +12,7 @@
#include "DDraw/Hooks.h" #include "DDraw/Hooks.h"
#include "DDraw/RealPrimarySurface.h" #include "DDraw/RealPrimarySurface.h"
#include "DDraw/Repository.h" #include "DDraw/Repository.h"
#include "Dll/Procs.h"
namespace namespace
{ {
@ -83,7 +84,7 @@ namespace DDraw
void installHooks() void installHooks()
{ {
CompatPtr<IDirectDraw> dd; CompatPtr<IDirectDraw> dd;
CALL_ORIG_DDRAW(DirectDrawCreate, nullptr, &dd.getRef(), nullptr); CALL_ORIG_PROC(DirectDrawCreate, nullptr, &dd.getRef(), nullptr);
if (!dd) if (!dd)
{ {
Compat::Log() << "Failed to create a DirectDraw object for hooking"; Compat::Log() << "Failed to create a DirectDraw object for hooking";

View File

@ -11,7 +11,6 @@
#include "DDraw/RealPrimarySurface.h" #include "DDraw/RealPrimarySurface.h"
#include "DDraw/ScopedThreadLock.h" #include "DDraw/ScopedThreadLock.h"
#include "DDraw/Types.h" #include "DDraw/Types.h"
#include "DDrawProcs.h"
#include "Gdi/Gdi.h" #include "Gdi/Gdi.h"
namespace namespace

View File

@ -4,7 +4,7 @@
#include "Common/CompatPtr.h" #include "Common/CompatPtr.h"
#include "Common/Log.h" #include "Common/Log.h"
#include "DDraw/Repository.h" #include "DDraw/Repository.h"
#include "DDrawProcs.h" #include "Dll/Procs.h"
namespace namespace
{ {
@ -26,7 +26,7 @@ namespace
CompatPtr<IDirectDraw7> createDirectDraw() CompatPtr<IDirectDraw7> createDirectDraw()
{ {
CompatPtr<IDirectDraw7> dd; CompatPtr<IDirectDraw7> dd;
HRESULT result = CALL_ORIG_DDRAW(DirectDrawCreateEx, nullptr, HRESULT result = CALL_ORIG_PROC(DirectDrawCreateEx, nullptr,
reinterpret_cast<void**>(&dd.getRef()), IID_IDirectDraw7, nullptr); reinterpret_cast<void**>(&dd.getRef()), IID_IDirectDraw7, nullptr);
if (FAILED(result)) if (FAILED(result))
{ {

View File

@ -1,6 +1,6 @@
#pragma once #pragma once
#include "DDrawProcs.h" #include "Dll/Procs.h"
namespace DDraw namespace DDraw
{ {
@ -9,12 +9,12 @@ namespace DDraw
public: public:
ScopedThreadLock() ScopedThreadLock()
{ {
Compat::origProcs.AcquireDDThreadLock(); Dll::g_origProcs.AcquireDDThreadLock();
} }
~ScopedThreadLock() ~ScopedThreadLock()
{ {
Compat::origProcs.ReleaseDDThreadLock(); Dll::g_origProcs.ReleaseDDThreadLock();
} }
}; };
} }

View File

@ -96,7 +96,7 @@
<ObjectFileName>$(IntDir)%(RelativeDir)</ObjectFileName> <ObjectFileName>$(IntDir)%(RelativeDir)</ObjectFileName>
</ClCompile> </ClCompile>
<Link> <Link>
<ModuleDefinitionFile>DDrawCompat.def</ModuleDefinitionFile> <ModuleDefinitionFile>Dll/DDrawCompat.def</ModuleDefinitionFile>
<AdditionalDependencies>dxguid.lib;detours.lib;msimg32.lib;oleacc.lib;uxtheme.lib;dwmapi.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>dxguid.lib;detours.lib;msimg32.lib;oleacc.lib;uxtheme.lib;dwmapi.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
</Link> </Link>
</ItemDefinitionGroup> </ItemDefinitionGroup>
@ -125,7 +125,7 @@
<ObjectFileName>$(IntDir)%(RelativeDir)</ObjectFileName> <ObjectFileName>$(IntDir)%(RelativeDir)</ObjectFileName>
</ClCompile> </ClCompile>
<Link> <Link>
<ModuleDefinitionFile>DDrawCompat.def</ModuleDefinitionFile> <ModuleDefinitionFile>Dll/DDrawCompat.def</ModuleDefinitionFile>
<AdditionalDependencies>dxguid.lib;detours.lib;msimg32.lib;oleacc.lib;uxtheme.lib;dwmapi.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies> <AdditionalDependencies>dxguid.lib;detours.lib;msimg32.lib;oleacc.lib;uxtheme.lib;dwmapi.lib;winmm.lib;%(AdditionalDependencies)</AdditionalDependencies>
<GenerateDebugInformation>No</GenerateDebugInformation> <GenerateDebugInformation>No</GenerateDebugInformation>
</Link> </Link>
@ -169,7 +169,6 @@
<ClInclude Include="D3dDdi\Visitors\AdapterFuncsVisitor.h" /> <ClInclude Include="D3dDdi\Visitors\AdapterFuncsVisitor.h" />
<ClInclude Include="D3dDdi\Visitors\DeviceCallbacksVisitor.h" /> <ClInclude Include="D3dDdi\Visitors\DeviceCallbacksVisitor.h" />
<ClInclude Include="D3dDdi\Visitors\DeviceFuncsVisitor.h" /> <ClInclude Include="D3dDdi\Visitors\DeviceFuncsVisitor.h" />
<ClInclude Include="DDrawProcs.h" />
<ClInclude Include="DDraw\ActivateAppHandler.h" /> <ClInclude Include="DDraw\ActivateAppHandler.h" />
<ClInclude Include="DDraw\DirectDraw.h" /> <ClInclude Include="DDraw\DirectDraw.h" />
<ClInclude Include="DDraw\DirectDrawPalette.h" /> <ClInclude Include="DDraw\DirectDrawPalette.h" />
@ -193,6 +192,7 @@
<ClInclude Include="Direct3d\Types.h" /> <ClInclude Include="Direct3d\Types.h" />
<ClInclude Include="Direct3d\Visitors\Direct3dDeviceVtblVisitor.h" /> <ClInclude Include="Direct3d\Visitors\Direct3dDeviceVtblVisitor.h" />
<ClInclude Include="Direct3d\Visitors\Direct3dVtblVisitor.h" /> <ClInclude Include="Direct3d\Visitors\Direct3dVtblVisitor.h" />
<ClInclude Include="Dll\Procs.h" />
<ClInclude Include="Gdi\Gdi.h" /> <ClInclude Include="Gdi\Gdi.h" />
<ClInclude Include="Gdi\Caret.h" /> <ClInclude Include="Gdi\Caret.h" />
<ClInclude Include="Gdi\Dc.h" /> <ClInclude Include="Gdi\Dc.h" />
@ -231,8 +231,9 @@
<ClCompile Include="Direct3d\Direct3d.cpp" /> <ClCompile Include="Direct3d\Direct3d.cpp" />
<ClCompile Include="Direct3d\Direct3dDevice.cpp" /> <ClCompile Include="Direct3d\Direct3dDevice.cpp" />
<ClCompile Include="Direct3d\Hooks.cpp" /> <ClCompile Include="Direct3d\Hooks.cpp" />
<ClCompile Include="DllMain.cpp" /> <ClCompile Include="Dll\Procs.cpp" />
<ClCompile Include="DDrawProcs.cpp" /> <ClCompile Include="Dll\DllMain.cpp" />
<ClCompile Include="Dll\UnmodifiedProcs.cpp" />
<ClCompile Include="Gdi\Gdi.cpp" /> <ClCompile Include="Gdi\Gdi.cpp" />
<ClCompile Include="Gdi\Caret.cpp" /> <ClCompile Include="Gdi\Caret.cpp" />
<ClCompile Include="Gdi\Dc.cpp" /> <ClCompile Include="Gdi\Dc.cpp" />
@ -243,13 +244,12 @@
<ClCompile Include="Gdi\ScrollFunctions.cpp" /> <ClCompile Include="Gdi\ScrollFunctions.cpp" />
<ClCompile Include="Gdi\TitleBar.cpp" /> <ClCompile Include="Gdi\TitleBar.cpp" />
<ClCompile Include="Gdi\WinProc.cpp" /> <ClCompile Include="Gdi\WinProc.cpp" />
<ClCompile Include="UnmodifiedDDrawProcs.cpp" />
<ClCompile Include="Win32\FontSmoothing.cpp" /> <ClCompile Include="Win32\FontSmoothing.cpp" />
<ClCompile Include="Win32\MsgHooks.cpp" /> <ClCompile Include="Win32\MsgHooks.cpp" />
<ClCompile Include="Win32\Registry.cpp" /> <ClCompile Include="Win32\Registry.cpp" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="DDrawCompat.def" /> <None Include="Dll\DDrawCompat.def" />
</ItemGroup> </ItemGroup>
<Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" /> <Import Project="$(VCTargetsPath)\Microsoft.Cpp.targets" />
<ImportGroup Label="ExtensionTargets"> <ImportGroup Label="ExtensionTargets">

View File

@ -61,11 +61,14 @@
<Filter Include="Header Files\Config"> <Filter Include="Header Files\Config">
<UniqueIdentifier>{5c6203cd-b703-4af0-a283-fa9eb72c2d07}</UniqueIdentifier> <UniqueIdentifier>{5c6203cd-b703-4af0-a283-fa9eb72c2d07}</UniqueIdentifier>
</Filter> </Filter>
<Filter Include="Header Files\Dll">
<UniqueIdentifier>{8a50d66d-8372-4dde-bbd1-302a52d7a385}</UniqueIdentifier>
</Filter>
<Filter Include="Source Files\Dll">
<UniqueIdentifier>{41544d1c-712a-4bef-8913-a40155a33ba0}</UniqueIdentifier>
</Filter>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClInclude Include="DDrawProcs.h">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="Gdi\Gdi.h"> <ClInclude Include="Gdi\Gdi.h">
<Filter>Header Files\Gdi</Filter> <Filter>Header Files\Gdi</Filter>
</ClInclude> </ClInclude>
@ -234,17 +237,11 @@
<ClInclude Include="Config\Config.h"> <ClInclude Include="Config\Config.h">
<Filter>Header Files\Config</Filter> <Filter>Header Files\Config</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="Dll\Procs.h">
<Filter>Header Files\Dll</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="DllMain.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="UnmodifiedDDrawProcs.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="DDrawProcs.cpp">
<Filter>Source Files</Filter>
</ClCompile>
<ClCompile Include="Gdi\Gdi.cpp"> <ClCompile Include="Gdi\Gdi.cpp">
<Filter>Source Files\Gdi</Filter> <Filter>Source Files\Gdi</Filter>
</ClCompile> </ClCompile>
@ -353,10 +350,19 @@
<ClCompile Include="Win32\Registry.cpp"> <ClCompile Include="Win32\Registry.cpp">
<Filter>Source Files\Win32</Filter> <Filter>Source Files\Win32</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="Dll\DllMain.cpp">
<Filter>Source Files\Dll</Filter>
</ClCompile>
<ClCompile Include="Dll\Procs.cpp">
<Filter>Source Files\Dll</Filter>
</ClCompile>
<ClCompile Include="Dll\UnmodifiedProcs.cpp">
<Filter>Source Files\Dll</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<None Include="DDrawCompat.def"> <None Include="Dll\DDrawCompat.def">
<Filter>Source Files</Filter> <Filter>Source Files\Dll</Filter>
</None> </None>
</ItemGroup> </ItemGroup>
</Project> </Project>

View File

@ -1,6 +0,0 @@
#include "DDrawProcs.h"
namespace Compat
{
DDrawProcs origProcs = {};
}

View File

@ -9,6 +9,7 @@
#include "Direct3d/Direct3d.h" #include "Direct3d/Direct3d.h"
#include "Direct3d/Direct3dDevice.h" #include "Direct3d/Direct3dDevice.h"
#include "Direct3d/Hooks.h" #include "Direct3d/Hooks.h"
#include "Dll/Procs.h"
namespace namespace
{ {
@ -123,7 +124,7 @@ namespace Direct3d
{ {
auto dd7(DDraw::Repository::getDirectDraw()); auto dd7(DDraw::Repository::getDirectDraw());
CompatPtr<IDirectDraw> dd; CompatPtr<IDirectDraw> dd;
CALL_ORIG_DDRAW(DirectDrawCreate, nullptr, &dd.getRef(), nullptr); CALL_ORIG_PROC(DirectDrawCreate, nullptr, &dd.getRef(), nullptr);
if (!dd || !dd7 || FAILED(dd->SetCooperativeLevel(dd, nullptr, DDSCL_NORMAL))) if (!dd || !dd7 || FAILED(dd->SetCooperativeLevel(dd, nullptr, DDSCL_NORMAL)))
{ {
Compat::Log() << "Failed to hook Direct3d interfaces"; Compat::Log() << "Failed to hook Direct3d interfaces";

View File

@ -9,8 +9,8 @@
#include "D3dDdi/Hooks.h" #include "D3dDdi/Hooks.h"
#include "DDraw/DisplayMode.h" #include "DDraw/DisplayMode.h"
#include "DDraw/Hooks.h" #include "DDraw/Hooks.h"
#include "DDrawProcs.h"
#include "Direct3d/Hooks.h" #include "Direct3d/Hooks.h"
#include "Dll/Procs.h"
#include "Gdi/Gdi.h" #include "Gdi/Gdi.h"
#include "Win32/FontSmoothing.h" #include "Win32/FontSmoothing.h"
#include "Win32/MsgHooks.h" #include "Win32/MsgHooks.h"
@ -18,6 +18,8 @@
struct IDirectInput; struct IDirectInput;
HRESULT WINAPI SetAppCompatData(DWORD, DWORD);
namespace namespace
{ {
HMODULE g_origDDrawModule = nullptr; HMODULE g_origDDrawModule = nullptr;
@ -79,8 +81,8 @@ namespace
} }
} }
#define LOAD_ORIGINAL_DDRAW_PROC(procName) \ #define LOAD_ORIGINAL_PROC(procName) \
Compat::origProcs.procName = GetProcAddress(g_origDDrawModule, #procName); Dll::g_origProcs.procName = GetProcAddress(g_origDDrawModule, #procName);
BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID /*lpvReserved*/) BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID /*lpvReserved*/)
{ {
@ -112,8 +114,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID /*lpvReserved*/)
return FALSE; return FALSE;
} }
VISIT_ALL_DDRAW_PROCS(LOAD_ORIGINAL_DDRAW_PROC); VISIT_ALL_PROCS(LOAD_ORIGINAL_PROC);
Compat::origProcs.DirectInputCreateA = GetProcAddress(g_origDInputModule, "DirectInputCreateA"); Dll::g_origProcs.DirectInputCreateA = GetProcAddress(g_origDInputModule, "DirectInputCreateA");
const BOOL disablePriorityBoost = TRUE; const BOOL disablePriorityBoost = TRUE;
SetProcessPriorityBoost(GetCurrentProcess(), disablePriorityBoost); SetProcessPriorityBoost(GetCurrentProcess(), disablePriorityBoost);
@ -125,13 +127,8 @@ BOOL WINAPI DllMain(HINSTANCE hinstDLL, DWORD fdwReason, LPVOID /*lpvReserved*/)
Win32::MsgHooks::installHooks(); Win32::MsgHooks::installHooks();
Time::init(); Time::init();
if (Compat::origProcs.SetAppCompatData) const DWORD disableMaxWindowedMode = 12;
{ CALL_ORIG_PROC(SetAppCompatData, disableMaxWindowedMode, 0);
typedef HRESULT WINAPI SetAppCompatDataFunc(DWORD, DWORD);
auto setAppCompatData = reinterpret_cast<SetAppCompatDataFunc*>(Compat::origProcs.SetAppCompatData);
const DWORD disableMaxWindowedMode = 12;
setAppCompatData(disableMaxWindowedMode, 0);
}
Compat::Log() << "DDrawCompat loaded successfully"; Compat::Log() << "DDrawCompat loaded successfully";
} }
@ -159,7 +156,7 @@ extern "C" HRESULT WINAPI DirectDrawCreate(
Compat::LogEnter(__func__, lpGUID, lplpDD, pUnkOuter); Compat::LogEnter(__func__, lpGUID, lplpDD, pUnkOuter);
installHooks(); installHooks();
suppressEmulatedDirectDraw(lpGUID); suppressEmulatedDirectDraw(lpGUID);
HRESULT result = CALL_ORIG_DDRAW(DirectDrawCreate, lpGUID, lplpDD, pUnkOuter); HRESULT result = CALL_ORIG_PROC(DirectDrawCreate, lpGUID, lplpDD, pUnkOuter);
Compat::LogLeave(__func__, lpGUID, lplpDD, pUnkOuter) << result; Compat::LogLeave(__func__, lpGUID, lplpDD, pUnkOuter) << result;
return result; return result;
} }
@ -173,7 +170,7 @@ extern "C" HRESULT WINAPI DirectDrawCreateEx(
Compat::LogEnter(__func__, lpGUID, lplpDD, iid, pUnkOuter); Compat::LogEnter(__func__, lpGUID, lplpDD, iid, pUnkOuter);
installHooks(); installHooks();
suppressEmulatedDirectDraw(lpGUID); suppressEmulatedDirectDraw(lpGUID);
HRESULT result = CALL_ORIG_DDRAW(DirectDrawCreateEx, lpGUID, lplpDD, iid, pUnkOuter); HRESULT result = CALL_ORIG_PROC(DirectDrawCreateEx, lpGUID, lplpDD, iid, pUnkOuter);
Compat::LogLeave(__func__, lpGUID, lplpDD, iid, pUnkOuter) << result; Compat::LogLeave(__func__, lpGUID, lplpDD, iid, pUnkOuter) << result;
return result; return result;
} }
@ -185,7 +182,7 @@ extern "C" HRESULT WINAPI DirectInputCreateA(
LPUNKNOWN punkOuter) LPUNKNOWN punkOuter)
{ {
Compat::LogEnter(__func__, hinst, dwVersion, lplpDirectInput, punkOuter); Compat::LogEnter(__func__, hinst, dwVersion, lplpDirectInput, punkOuter);
HRESULT result = CALL_ORIG_DDRAW(DirectInputCreateA, hinst, dwVersion, lplpDirectInput, punkOuter); HRESULT result = CALL_ORIG_PROC(DirectInputCreateA, hinst, dwVersion, lplpDirectInput, punkOuter);
Compat::LogLeave(__func__, hinst, dwVersion, lplpDirectInput, punkOuter) << result; Compat::LogLeave(__func__, hinst, dwVersion, lplpDirectInput, punkOuter) << result;
return result; return result;
} }

View File

@ -0,0 +1,6 @@
#include "Dll/Procs.h"
namespace Dll
{
Procs g_origProcs = {};
}

View File

@ -4,7 +4,7 @@
#include <Windows.h> #include <Windows.h>
#define VISIT_UNMODIFIED_DDRAW_PROCS(visit) \ #define VISIT_UNMODIFIED_PROCS(visit) \
visit(AcquireDDThreadLock) \ visit(AcquireDDThreadLock) \
visit(CompleteCreateSysmemSurface) \ visit(CompleteCreateSysmemSurface) \
visit(D3DParseUnknownCommand) \ visit(D3DParseUnknownCommand) \
@ -26,30 +26,30 @@
visit(ReleaseDDThreadLock) \ visit(ReleaseDDThreadLock) \
visit(SetAppCompatData) visit(SetAppCompatData)
#define VISIT_MODIFIED_DDRAW_PROCS(visit) \ #define VISIT_MODIFIED_PROCS(visit) \
visit(DirectDrawCreate) \ visit(DirectDrawCreate) \
visit(DirectDrawCreateEx) visit(DirectDrawCreateEx)
#define VISIT_ALL_DDRAW_PROCS(visit) \ #define VISIT_ALL_PROCS(visit) \
VISIT_UNMODIFIED_DDRAW_PROCS(visit) \ VISIT_UNMODIFIED_PROCS(visit) \
VISIT_MODIFIED_DDRAW_PROCS(visit) VISIT_MODIFIED_PROCS(visit)
#define ADD_FARPROC_MEMBER(memberName) FARPROC memberName; #define ADD_FARPROC_MEMBER(memberName) FARPROC memberName;
namespace Compat namespace Dll
{ {
struct DDrawProcs struct Procs
{ {
VISIT_ALL_DDRAW_PROCS(ADD_FARPROC_MEMBER); VISIT_ALL_PROCS(ADD_FARPROC_MEMBER);
FARPROC DirectInputCreateA; FARPROC DirectInputCreateA;
}; };
extern DDrawProcs origProcs; extern Procs g_origProcs;
} }
#undef ADD_FARPROC_MEMBER #undef ADD_FARPROC_MEMBER
#define CALL_ORIG_DDRAW(procName, ...) \ #define CALL_ORIG_PROC(procName, ...) \
(Compat::origProcs.procName ? \ (Dll::g_origProcs.procName ? \
reinterpret_cast<decltype(procName)*>(Compat::origProcs.procName)(__VA_ARGS__) : \ reinterpret_cast<decltype(procName)*>(Dll::g_origProcs.procName)(__VA_ARGS__) : \
E_FAIL) E_FAIL)

View File

@ -0,0 +1,9 @@
#include "Dll/Procs.h"
#define CREATE_PROC_STUB(procName) \
extern "C" __declspec(naked) void __stdcall procName() \
{ \
__asm jmp Dll::g_origProcs.procName \
}
VISIT_UNMODIFIED_PROCS(CREATE_PROC_STUB)

View File

@ -6,7 +6,7 @@
#include "Config/Config.h" #include "Config/Config.h"
#include "DDraw/CompatPrimarySurface.h" #include "DDraw/CompatPrimarySurface.h"
#include "DDraw/Repository.h" #include "DDraw/Repository.h"
#include "DDrawProcs.h" #include "Dll/Procs.h"
#include "Gdi/DcCache.h" #include "Gdi/DcCache.h"
namespace namespace
@ -45,7 +45,7 @@ namespace
} }
// Release DD critical section acquired by IDirectDrawSurface7::GetDC to avoid deadlocks // Release DD critical section acquired by IDirectDrawSurface7::GetDC to avoid deadlocks
Compat::origProcs.ReleaseDDThreadLock(); Dll::g_origProcs.ReleaseDDThreadLock();
cachedDc.surface = surface.detach(); cachedDc.surface = surface.detach();
cachedDc.dc = dc; cachedDc.dc = dc;
@ -105,7 +105,7 @@ namespace
void releaseCachedDc(CachedDc cachedDc) void releaseCachedDc(CachedDc cachedDc)
{ {
// Reacquire DD critical section that was temporarily released after IDirectDrawSurface7::GetDC // Reacquire DD critical section that was temporarily released after IDirectDrawSurface7::GetDC
Compat::origProcs.AcquireDDThreadLock(); Dll::g_origProcs.AcquireDDThreadLock();
HRESULT result = cachedDc.surface->ReleaseDC(cachedDc.surface, cachedDc.dc); HRESULT result = cachedDc.surface->ReleaseDC(cachedDc.surface, cachedDc.dc);
if (FAILED(result)) if (FAILED(result))

View File

@ -4,7 +4,7 @@
#include "DDraw/CompatPrimarySurface.h" #include "DDraw/CompatPrimarySurface.h"
#include "DDraw/PaletteConverter.h" #include "DDraw/PaletteConverter.h"
#include "DDraw/RealPrimarySurface.h" #include "DDraw/RealPrimarySurface.h"
#include "DDrawProcs.h" #include "Dll/Procs.h"
#include "Gdi/Caret.h" #include "Gdi/Caret.h"
#include "Gdi/DcCache.h" #include "Gdi/DcCache.h"
#include "Gdi/DcFunctions.h" #include "Gdi/DcFunctions.h"
@ -93,7 +93,7 @@ namespace
} }
g_ddLockFlags = 0; g_ddLockFlags = 0;
Compat::origProcs.ReleaseDDThreadLock(); Dll::g_origProcs.ReleaseDDThreadLock();
} }
} }
@ -113,11 +113,11 @@ namespace Gdi
if (0 == g_renderingRefCount) if (0 == g_renderingRefCount)
{ {
LeaveCriticalSection(&g_gdiCriticalSection); LeaveCriticalSection(&g_gdiCriticalSection);
Compat::origProcs.AcquireDDThreadLock(); Dll::g_origProcs.AcquireDDThreadLock();
EnterCriticalSection(&g_gdiCriticalSection); EnterCriticalSection(&g_gdiCriticalSection);
if (!lockPrimarySurface(lockFlags)) if (!lockPrimarySurface(lockFlags))
{ {
Compat::origProcs.ReleaseDDThreadLock(); Dll::g_origProcs.ReleaseDDThreadLock();
return false; return false;
} }
} }

View File

@ -1,9 +0,0 @@
#include "DDrawProcs.h"
#define CREATE_DDRAW_PROC_STUB(procName) \
extern "C" __declspec(naked) void __stdcall procName() \
{ \
__asm jmp Compat::origProcs.procName \
}
VISIT_UNMODIFIED_DDRAW_PROCS(CREATE_DDRAW_PROC_STUB)