diff --git a/pcsx2/Misc.h b/pcsx2/Misc.h index 8637b99b81..22b7c25ece 100644 --- a/pcsx2/Misc.h +++ b/pcsx2/Misc.h @@ -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) diff --git a/pcsx2/windows/WinMain.c b/pcsx2/windows/WinMain.c index 0ba81687c4..01a5869c28 100644 --- a/pcsx2/windows/WinMain.c +++ b/pcsx2/windows/WinMain.c @@ -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")); diff --git a/pcsx2/windows/pcsx2.rc b/pcsx2/windows/pcsx2.rc index 8e27de0026..6470a4013f 100644 --- a/pcsx2/windows/pcsx2.rc +++ b/pcsx2/windows/pcsx2.rc @@ -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 diff --git a/pcsx2/x86/iFPU.c b/pcsx2/x86/iFPU.c index 2cb320286d..eb678b03db 100644 --- a/pcsx2/x86/iFPU.c +++ b/pcsx2/x86/iFPU.c @@ -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) = {