gsdx-hw: Remove DynamicCrcHack feature.

This commit is contained in:
lightningterror 2020-09-17 20:37:37 +02:00
parent 40d02400ca
commit dd5d1a1abb
2 changed files with 0 additions and 149 deletions

View File

@ -1135,141 +1135,6 @@ bool GSC_XenosagaE3(const GSFrameInfo& fi, int& skip)
////////////////////////////////////////////////////////////////////////////////
#ifdef ENABLE_DYNAMIC_CRC_HACK
#include <sys/stat.h>
/***************************************************************************
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;

View File

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