diff --git a/plugins/GSdx/Renderers/HW/GSHwHack.cpp b/plugins/GSdx/Renderers/HW/GSHwHack.cpp index 198ecdc93f..209f666d63 100644 --- a/plugins/GSdx/Renderers/HW/GSHwHack.cpp +++ b/plugins/GSdx/Renderers/HW/GSHwHack.cpp @@ -1135,141 +1135,6 @@ bool GSC_XenosagaE3(const GSFrameInfo& fi, int& skip) //////////////////////////////////////////////////////////////////////////////// -#ifdef ENABLE_DYNAMIC_CRC_HACK - -#include -/*************************************************************************** - AutoReloadLibrary : Automatically reloads a dll if the file was modified. - Uses a temporary copy of the watched dll such that the original - can be modified while the copy is loaded and used. - - NOTE: The API is not platform specific, but current implementation is Win32. -***************************************************************************/ -class AutoReloadLibrary -{ -private: - std::string m_dllPath, m_loadedDllPath; - DWORD m_minMsBetweenProbes; - time_t m_lastFileModification; - DWORD m_lastProbe; - HMODULE m_library; - - std::string GetTempName() - { - std::string result = m_loadedDllPath + ".tmp"; //default name - TCHAR tmpPath[MAX_PATH], tmpName[MAX_PATH]; - DWORD ret = GetTempPath(MAX_PATH, tmpPath); - if (ret && ret <= MAX_PATH && GetTempFileName(tmpPath, TEXT("GSdx"), 0, tmpName)) - result = tmpName; - - return result; - }; - - void UnloadLib() - { - if (!m_library) - return; - - FreeLibrary(m_library); - m_library = NULL; - - // If can't delete (might happen when GSdx closes), schedule delete on reboot - if (!DeleteFile(m_loadedDllPath.c_str())) - MoveFileEx(m_loadedDllPath.c_str(), NULL, MOVEFILE_DELAY_UNTIL_REBOOT); - } - -public: - AutoReloadLibrary(const std::string dllPath, const int minMsBetweenProbes = 100) - : m_minMsBetweenProbes(minMsBetweenProbes) - , m_dllPath(dllPath) - , m_lastFileModification(0) - , m_lastProbe(0) - , m_library(0){}; - - ~AutoReloadLibrary() { UnloadLib(); }; - - // If timeout has ellapsed, probe the dll for change, and reload if it was changed. - // If it returns true, then the dll was freed/reloaded, and any symbol addresse previously obtained is now invalid and needs to be re-obtained. - // Overhead is very low when when probe timeout has not ellapsed, and especially if current timestamp is supplied as argument. - // Note: there's no relation between the file modification date and currentMs value, so it need'nt neccessarily be an actual timestamp. - // Note: isChanged is guarenteed to return true at least once - // (even if the file doesn't exist, at which case the following GetSymbolAddress will return NULL) - bool isChanged(const DWORD currentMs = 0) - { - DWORD current = currentMs ? currentMs : GetTickCount(); - if (current >= m_lastProbe && (current - m_lastProbe) < m_minMsBetweenProbes) - return false; - - bool firstTime = !m_lastProbe; - m_lastProbe = current; - - struct stat s; - if (stat(m_dllPath.c_str(), &s)) - { - // File doesn't exist or other error, unload dll - bool wasLoaded = m_library ? true : false; - UnloadLib(); - return firstTime || wasLoaded; // Changed if previously loaded or the first time accessing this method (and file doesn't exist) - } - - if (m_lastFileModification == s.st_mtime) - return false; - m_lastFileModification = s.st_mtime; - - // File modified, reload - UnloadLib(); - - if (!CopyFile(m_dllPath.c_str(), (m_loadedDllPath = GetTempName()).c_str(), false)) - return true; - - m_library = LoadLibrary(m_loadedDllPath.c_str()); - return true; - }; - - // Return value is NULL if the dll isn't loaded (failure or doesn't exist) or if the symbol isn't found. - void* GetSymbolAddress(const char* name) { return m_library ? GetProcAddress(m_library, name) : NULL; }; -}; - - -// Use DynamicCrcHack function from a dll which can be modified while GSdx/PCSX2 is running. -// return value is true if the call succeeded or false otherwise (If the hack could not be invoked: no dll/function/etc). -// result contains the result of the hack call. - -typedef uint32(__cdecl* DynaHackType)(uint32, uint32, uint32, uint32, uint32, uint32, uint32, int32*, uint32, int32); -typedef uint32(__cdecl* DynaHackType2)(uint32, uint32, uint32, uint32, uint32, uint32, uint32, int32*, uint32, int32, uint32); // Also accept CRC - -bool IsInvokedDynamicCrcHack(GSFrameInfo& fi, int& skip, int region, bool& result, uint32 crc) -{ - static AutoReloadLibrary dll(DYNA_DLL_PATH); - static DynaHackType dllFunc = NULL; - static DynaHackType2 dllFunc2 = NULL; - - if (dll.isChanged()) - { - dllFunc = (DynaHackType)dll.GetSymbolAddress("DynamicCrcHack"); - dllFunc2 = (DynaHackType2)dll.GetSymbolAddress("DynamicCrcHack2"); - printf("GSdx: Dynamic CRC-hacks%s: %s\n", - ((dllFunc && !dllFunc2) ? " [Old dynaDLL - No CRC support]" : ""), - dllFunc ? "Loaded OK (-> overriding internal hacks)" : - "Not available (-> using internal hacks)"); - } - - if (!dllFunc2 && !dllFunc) - return false; - - int32 skip32 = skip; - bool hasSharedBits = GSUtil::HasSharedBits(fi.FBP, fi.FPSM, fi.TBP0, fi.TPSM); - if (dllFunc2) - result = dllFunc2(fi.FBP, fi.FPSM, fi.FBMSK, fi.TBP0, fi.TPSM, fi.TZTST, (uint32)fi.TME, &skip32, (uint32)region, (uint32)(hasSharedBits ? 1 : 0), crc) ? true : false; - else - result = dllFunc(fi.FBP, fi.FPSM, fi.FBMSK, fi.TBP0, fi.TPSM, fi.TZTST, (uint32)fi.TME, &skip32, (uint32)region, (uint32)(hasSharedBits ? 1 : 0)) ? true : false; - skip = skip32; - - return true; -} - -#endif - void GSState::SetupCrcHack() { GetSkipCount lut[CRC::TitleCount]; @@ -1393,15 +1258,6 @@ bool GSState::IsBadFrame() fi.TPSM = m_context->TEX0.PSM; fi.TZTST = m_context->TEST.ZTST; -#ifdef ENABLE_DYNAMIC_CRC_HACK - bool res = false; - if (IsInvokedDynamicCrcHack(fi, m_skip, g_crc_region, res, m_crc)) - { - if (!res) - return false; - } - else -#endif if (m_gsc && !m_gsc(fi, m_skip)) { return false; diff --git a/plugins/GSdx/config.h b/plugins/GSdx/config.h index 877cd78c8b..fb5fc1621f 100644 --- a/plugins/GSdx/config.h +++ b/plugins/GSdx/config.h @@ -26,11 +26,6 @@ //#define ENABLE_ACCURATE_BUFFER_EMULATION #define ENABLE_JIT_RASTERIZER -#define EXTERNAL_SHADER_LOADING 1 - -//#define ENABLE_DYNAMIC_CRC_HACK -#define DYNA_DLL_PATH "c:/dev/pcsx2/trunk/tools/dynacrchack/DynaCrcHack.dll" - //#define DISABLE_HW_TEXTURE_CACHE // Slow but fixes a lot of bugs //#define DISABLE_BITMASKING