From d155af6ecdc081cc4f5715c0c7c814369d9e31fa Mon Sep 17 00:00:00 2001 From: zeromus Date: Wed, 19 Aug 2015 22:20:56 -0500 Subject: [PATCH] add workaround to jabo for some old intel gpus (seemingly only involving d3d8) which wreck the SetDllDirectory for the process. A similar workaround may be needed for d39 display method, but that isn't clear yet. --- .../D3D8Interceptor/Direct3D8Functions.cpp | 11 +++++++++++ .../D3D8Interceptor/d3d8Wrapper.cpp | 9 ++++++++- output/dll/d3d8.dll | Bin 20480 -> 20480 bytes 3 files changed, 19 insertions(+), 1 deletion(-) diff --git a/libmupen64plus/D3D8Interceptor/Direct3D8Functions.cpp b/libmupen64plus/D3D8Interceptor/Direct3D8Functions.cpp index ca5b69d040..9fc7339635 100644 --- a/libmupen64plus/D3D8Interceptor/Direct3D8Functions.cpp +++ b/libmupen64plus/D3D8Interceptor/Direct3D8Functions.cpp @@ -121,10 +121,21 @@ extern "C" STDMETHODIMP D3D8Wrapper::IDirect3D8::CreateDevice(UINT Adapter,D3D8Base::D3DDEVTYPE DeviceType,HWND hFocusWindow,DWORD BehaviorFlags,D3D8Base::D3DPRESENT_PARAMETERS* pPresentationParameters,D3D8Wrapper::IDirect3DDevice8** ppReturnedDeviceInterface) { + //sometimes, Intel drivers will clear the dll path. So let's save and restore it (do their job for them) + //it doesn't seem like this happens any time besides creating the D3D8 object and a device. + //If it does, then this solution isn't scalable at all. + //This is a good place to note that it appears possible that on the affected drivers, the D3D9 interface will only SetDllDirectory the first time a D3D9 object is created + char oldDllDirectory[MAX_PATH]; + GetDllDirectory(MAX_PATH, oldDllDirectory); + LOG("IDirect3D8::CreateDevice( " << Adapter << " , " << DeviceType << " , " << hFocusWindow << " , " << BehaviorFlags << " , " << pPresentationParameters << " , " << ppReturnedDeviceInterface << " ) [ " << this << " ]\n"); D3D8Base::IDirect3DDevice8* realDevice = NULL; HRESULT hr = m_pD3D->CreateDevice(Adapter,DeviceType,hFocusWindow,BehaviorFlags,pPresentationParameters,&realDevice); + + //restore old DLL directory + SetDllDirectory(oldDllDirectory); + if(FAILED(hr)) { return hr; diff --git a/libmupen64plus/D3D8Interceptor/d3d8Wrapper.cpp b/libmupen64plus/D3D8Interceptor/d3d8Wrapper.cpp index 03f850b19f..905fdaad0f 100644 --- a/libmupen64plus/D3D8Interceptor/d3d8Wrapper.cpp +++ b/libmupen64plus/D3D8Interceptor/d3d8Wrapper.cpp @@ -14,7 +14,11 @@ extern "C" D3D8Wrapper::IDirect3D8* WINAPI Direct3DCreate8(UINT Version) { - // Get the real DLL path from the system directory + //sometimes, Intel drivers will clear the dll path. So let's save and restore it (do their job for them) + char oldDllDirectory[MAX_PATH]; + GetDllDirectory(MAX_PATH, oldDllDirectory); + + // Get the real DLL path from the system directory, needs to be specific to avoid binding to the d3d8.dll we're in now! // Might be unsafe CHAR dll_path[1024]; GetSystemDirectory(dll_path,1024); @@ -30,6 +34,9 @@ extern "C" // Wrap the object D3D8Wrapper::IDirect3D8* wrappedD3D = D3D8Wrapper::IDirect3D8::GetDirect3D(realD3D); + //restore old DLL directory + SetDllDirectory(oldDllDirectory); + return wrappedD3D; } } diff --git a/output/dll/d3d8.dll b/output/dll/d3d8.dll index 980ce2d2a0c6f86d777f8ef3150c96bcd5aba3fb..92edd7447204a10ef2052195119a44504823b981 100644 GIT binary patch delta 5642 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