found out why GT4 needed the hack, and fixed it correctly :D no need for the Gamefix hack anymore :p

git-svn-id: http://pcsx2-playground.googlecode.com/svn/trunk@102 a6443dda-0b58-4228-96e9-037be469359c
This commit is contained in:
cottonvibes 2008-09-08 04:26:44 +00:00 committed by Gregory Hainaut
parent 6f3a4a032d
commit c9be136946
4 changed files with 16 additions and 39 deletions

View File

@ -67,8 +67,8 @@
#define CHECK_FPU_EXTRA_FLAGS (!(Config.Hacks & 0x200)) // Sets correct flags in the FPU recs
//------------ SPECIAL GAME FIXES!!! ---------------
#define CHECK_FPUCLAMPHACK (Config.GameFixes & 0x1) // Special Fix for GT4, different clamping for FPU (Note: sets negative infinity to positive fMax when clamping, which the real ps2 doesn't do)
#define CHECK_FPUCLAMPHACK2 (Config.GameFixes & 0x4) // Special Fix for Tekken 5, different clamping for FPU (sets infinities to zero)
//#define CHECK_FPUCLAMPHACK (Config.GameFixes & 0x1) // Special Fix for GT4, different clamping for FPU (Note: sets negative infinity to positive fMax when clamping, which the real ps2 doesn't do)
#define CHECK_FPUCLAMPHACK (Config.GameFixes & 0x4) // Special Fix for Tekken 5, different clamping for FPU (sets infinities to zero)
#define CHECK_VUCLIPHACK (Config.GameFixes & 0x2) // Special Fix for GoW, updates the clipflag differently in recVUMI_CLIP() (note: turning this hack on, breaks Rockstar games)
#define CHECK_FRAMELIMIT (Config.Options&PCSX2_FRAMELIMIT_MASK)

View File

@ -722,7 +722,7 @@ BOOL APIENTRY GameFixes(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
{
case WM_INITDIALOG:
SetWindowText(hDlg, _("Game Specific Fixes"));
if(Config.GameFixes & 0x1) CheckDlgButton(hDlg, IDC_GAMEFIX1, TRUE);
//if(Config.GameFixes & 0x1) CheckDlgButton(hDlg, IDC_GAMEFIX1, TRUE);
if(Config.GameFixes & 0x2) CheckDlgButton(hDlg, IDC_GAMEFIX2, TRUE);
if(Config.GameFixes & 0x4) CheckDlgButton(hDlg, IDC_GAMEFIX3, TRUE);
return TRUE;
@ -731,7 +731,7 @@ BOOL APIENTRY GameFixes(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam)
if (LOWORD(wParam) == IDOK)
{
Config.GameFixes = 0;
Config.GameFixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX1) ? 0x1 : 0;
//Config.GameFixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX1) ? 0x1 : 0;
Config.GameFixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX2) ? 0x2 : 0;
Config.GameFixes |= IsDlgButtonChecked(hDlg, IDC_GAMEFIX3) ? 0x4 : 0;
@ -1242,8 +1242,8 @@ void CreateMainMenu() {
ADDMENUITEM(1, _("&Low"), ID_PROCESSLOW );
ADDMENUITEM(1, _("High"), ID_PROCESSHIGH);
ADDMENUITEM(1, _("Normal"), ID_PROCESSNORMAL);
ADDMENUITEM(0,_("Re&set"), ID_RUN_RESET);
ADDMENUITEM(0,_("&Arguments"), ID_RUN_CMDLINE);
ADDMENUITEM(0,_("Re&set"), ID_RUN_RESET);
ADDMENUITEM(0,_("E&xecute"), ID_RUN_EXECUTE);
ADDSUBMENU(0,_("&Config"));

View File

@ -83,13 +83,11 @@ BEGIN
DEFPUSHBUTTON "OK",IDOK,103,154,50,14
PUSHBUTTON "Cancel",IDCANCEL,157,154,50,14
CTEXT "Some games need special settings.\nConfigure them here.",IDC_STATIC,7,7,297,17
CONTROL "FPU Clamp Hack - Special fix for Gran Turismo 4 and possibly other games.",IDC_GAMEFIX1,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,48,265,10
CONTROL "VU Clip Hack - Special fix for God of War; Breaks Rockstar games!",IDC_GAMEFIX2,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,72,252,10
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,60,252,10
GROUPBOX "PCSX2 Gamefixes",IDC_STATIC,6,30,294,112
CONTROL "FPU Clamp Hack 2 - Special fix for Tekken 5 and maybe other games.",IDC_GAMEFIX3,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,60,253,10
CONTROL "FPU Clamp Hack - Special fix for Tekken 5 and maybe other games.",IDC_GAMEFIX3,
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,12,47,253,10
END

View File

@ -762,34 +762,29 @@ FPURECOMPILE_CONSTCODE(C_LE, XMMINFO_READS|XMMINFO_READT);
////////////////////////////////////////////////////
// Doesnt seem to like negatives - Ruins katamari graphics
// I REPEAT THE SIGN BIT (THATS 0x80000000) MUST *NOT* BE SET, jeez.
static PCSX2_ALIGNED16(u32 s_overflowmask[]) = {0x7fffffff, 0x7fffffff, 0x7fffffff, 0x7fffffff};
static u32 s_signbit = 0x80000000;
extern int g_VuNanHandling;
void fpuFloat(regd) {
if (CHECK_FPU_OVERFLOW) {
SSE_MAXSS_M32_to_XMM(regd, (uptr)&g_minvals[0]);
if (CHECK_FPU_OVERFLOW) { // MIN() must be before MAX()!
SSE_MINSS_M32_to_XMM(regd, (uptr)&g_maxvals[0]);
SSE_MAXSS_M32_to_XMM(regd, (uptr)&g_minvals[0]);
}
}
void ClampValues(regd) {
if (CHECK_FPUCLAMPHACK2) {
if (CHECK_FPUCLAMPHACK) {
int t5reg = _allocTempXMMreg(XMMT_FPS, -1);
SSE_XORPS_XMM_to_XMM(t5reg, t5reg);
SSE_CMPORDSS_XMM_to_XMM(t5reg, regd);
//if( g_VuNanHandling )
//SSE_ORPS_M128_to_XMM(t5reg, (uptr)s_overflowmask);
SSE_ANDPS_XMM_to_XMM(regd, t5reg);
//SSE_MAXSS_M32_to_XMM(regd, (uptr)&g_minvals[0]);
//SSE_MINSS_M32_to_XMM(regd, (uptr)&g_maxvals[0]);
SSE_MINSS_M32_to_XMM(regd, (uptr)&g_maxvals[0]);
SSE_MAXSS_M32_to_XMM(regd, (uptr)&g_minvals[0]);
_freeXMMreg(t5reg);
}
@ -798,23 +793,7 @@ void ClampValues(regd) {
}
void ClampValues2(regd) {
if (CHECK_FPUCLAMPHACK) { // This fixes Gran Turismo 4 graphics ( Converts NaN to Positive Maximum )
int t5reg = _allocTempXMMreg(XMMT_FPS, -1);
SSE_XORPS_XMM_to_XMM(t5reg, t5reg);
SSE_CMPORDSS_XMM_to_XMM(t5reg, regd);
SSE_ORPS_M128_to_XMM(t5reg, (uptr)s_overflowmask); // fixes katamari falling off podium
SSE_ANDPS_XMM_to_XMM(regd, t5reg);
//SSE_MAXSS_M32_to_XMM(regd, (uptr)&g_minvals[0]);
SSE_MINSS_M32_to_XMM(regd, (uptr)&g_maxvals[0]);
_freeXMMreg(t5reg);
}
else fpuFloat(regd);
fpuFloat(regd);
}
static void (*recComOpXMM_to_XMM[] )(x86SSERegType, x86SSERegType) = {