mirror of https://github.com/PCSX2/pcsx2.git
Rockstar games shouldn't have SPS anymore; also added 2 game-specific hacks, one for God of War, and one for Grand Turismo 4 the God of War hack brings back the SPS in the Rockstar games; so only turn it on for God of War.
hopefully we won't need these hacks in the future, once stuff is handled properly :p git-svn-id: http://pcsx2-playground.googlecode.com/svn/trunk@66 a6443dda-0b58-4228-96e9-037be469359c
This commit is contained in:
parent
09bb4dd533
commit
12d63f137a
|
@ -52,14 +52,17 @@
|
|||
#define CHECK_DUALCORE (Config.Options&PCSX2_DUALCORE)
|
||||
#define CHECK_EEREC (Config.Options&PCSX2_EEREC)
|
||||
#define CHECK_COP2REC (Config.Options&PCSX2_COP2REC) // goes with ee option
|
||||
//------------ SPEED HACKS!!! ---------------
|
||||
//------------ SPEED/MISC HACKS!!! ---------------
|
||||
#define CHECK_OVERFLOW (!(Config.Hacks & 0x2))
|
||||
#define CHECK_EXTRA_OVERFLOW (Config.Hacks & 0x40) // If enabled, Operands are checked for infinities before being used in the VU recs
|
||||
#define CHECK_EESYNC_HACK (Config.Hacks & 0x1)
|
||||
#define CHECK_IOPSYNC_HACK (Config.Hacks & 0x10)
|
||||
#define CHECK_EE_IOP_EXTRA (Config.Hacks & 0x20)
|
||||
#define CHECK_DENORMALS ((Config.Hacks & 0x8) ? 0xffc0 : 0x7f80) //If enabled, Denormals are Zero for the recs; and flush to zero is enabled as well
|
||||
#define CHECK_DENORMALS ((Config.Hacks & 0x8) ? 0xffc0 : 0x7f80) //If enabled, Denormals are Zero for the recs and flush to zero is enabled as well
|
||||
#define CHECK_FASTBRANCHES (Config.Hacks & 0x80)
|
||||
#define CHECK_VUCLIPHACK (Config.Hacks & 0x100) // Special Fix for GoW, updates the clipflag differently in recVUMI_CLIP() (note: turning this hack on, breaks Rockstar games)
|
||||
#define CHECK_VUMINIHACK (Config.Hacks & 0x200) // Special Fix for GT4, different clamping for recVUMI_MINI() (Note: sets negative infinity to positive fMax when clamping, which the real ps2 doesn't do)
|
||||
|
||||
|
||||
#define CHECK_FRAMELIMIT (Config.Options&PCSX2_FRAMELIMIT_MASK)
|
||||
|
||||
|
|
|
@ -728,6 +728,9 @@ BOOL APIENTRY HacksProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
|
|||
if(Config.Hacks & 0x20) CheckDlgButton(hDlg, IDC_SYNCHACK3, TRUE);
|
||||
if(Config.Hacks & 0x40) CheckDlgButton(hDlg, IDC_OVERFLOWHACK_EXTRA, TRUE);
|
||||
if(Config.Hacks & 0x80) CheckDlgButton(hDlg, IDC_FASTBRANCHES, TRUE);
|
||||
if(Config.Hacks & 0x100) CheckDlgButton(hDlg, IDC_VUCLIPHACK, TRUE);
|
||||
if(Config.Hacks & 0x200) CheckDlgButton(hDlg, IDC_VUMINIHACK, TRUE);
|
||||
|
||||
return TRUE;
|
||||
|
||||
case WM_COMMAND:
|
||||
|
@ -741,6 +744,8 @@ BOOL APIENTRY HacksProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
|
|||
Config.Hacks |= IsDlgButtonChecked(hDlg, IDC_SYNCHACK3) ? 0x20 : 0;
|
||||
Config.Hacks |= IsDlgButtonChecked(hDlg, IDC_OVERFLOWHACK_EXTRA) ? 0x40 : 0;
|
||||
Config.Hacks |= IsDlgButtonChecked(hDlg, IDC_FASTBRANCHES) ? 0x80 : 0;
|
||||
Config.Hacks |= IsDlgButtonChecked(hDlg, IDC_VUCLIPHACK) ? 0x100 : 0;
|
||||
Config.Hacks |= IsDlgButtonChecked(hDlg, IDC_VUMINIHACK) ? 0x200 : 0;
|
||||
|
||||
SaveConfig();
|
||||
|
||||
|
|
|
@ -938,18 +938,18 @@ BEGIN
|
|||
CONTROL 132,IDC_PS2SILVER_RECT,"Static",SS_BITMAP,0,167,70,74
|
||||
END
|
||||
|
||||
IDD_HACKS DIALOGEX 0, 0, 405, 251
|
||||
IDD_HACKS DIALOGEX 0, 0, 406, 273
|
||||
STYLE DS_SETFONT | DS_MODALFRAME | DS_FIXEDSYS | WS_POPUP | WS_CAPTION | WS_SYSMENU
|
||||
CAPTION "PCSX2 Speed Hacks"
|
||||
FONT 8, "MS Shell Dlg", 400, 0, 0x1
|
||||
BEGIN
|
||||
DEFPUSHBUTTON "OK",IDOK,146,230,50,14
|
||||
PUSHBUTTON "Cancel",IDCANCEL,202,230,50,14
|
||||
DEFPUSHBUTTON "OK",IDOK,146,252,50,14
|
||||
PUSHBUTTON "Cancel",IDCANCEL,202,252,50,14
|
||||
CONTROL "EE Sync Hack (x2) - Doubles the cycle rate of the EE.",IDC_SYNCHACK,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,114,252,10
|
||||
CONTROL "Disable All Overflow Checks - Doesn't check for overflow at all in the VU Recs.",IDC_OVERFLOWHACK,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,63,373,10
|
||||
CTEXT "These hacks will effect the speed of PCSX2 but possibly comprimise on compatability",IDC_HACKDESC,7,7,391,8
|
||||
CTEXT "These hacks will effect the speed of PCSX2 but possibly comprimise on compatability",IDC_HACKDESC,7,7,392,8
|
||||
CONTROL "Tighter SPU2 Sync ( FFXII vids) - Slower, not useful anymore.",IDC_SOUNDHACK,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,197,323,10
|
||||
CONTROL "IOP Sync Hack (x2) - Doubles the cycle rate of the IOP.",IDC_SYNCHACK2,
|
||||
|
@ -960,12 +960,16 @@ BEGIN
|
|||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,50,377,10
|
||||
CONTROL "EE/IOP Fast Branches - Quick branching ( Very small speedup, use only when you need every fps! )",IDC_FASTBRANCHES,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,183,351,10
|
||||
CTEXT "If you have problems, disable all these and try again",IDC_STATIC,7,22,391,8
|
||||
GROUPBOX "Overflow and Underflow",IDC_STATIC,7,36,391,60
|
||||
CTEXT "If you have problems, disable all these and try again",IDC_STATIC,7,22,392,8
|
||||
GROUPBOX "Overflow and Underflow",IDC_STATIC,7,36,392,60
|
||||
CONTROL "Denormals are Zero - Makes very small numbers equal zero. ( Big speedup on Intel CPUs ) ( Needs Restart! )",IDC_DENORMALS,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,76,377,10
|
||||
GROUPBOX "Sync Hacks",IDC_STATIC,7,101,391,59
|
||||
GROUPBOX "Miscellaneous",IDC_STATIC,7,168,391,46
|
||||
GROUPBOX "Sync Hacks",IDC_STATIC,7,101,392,59
|
||||
GROUPBOX "Miscellaneous / Special Game Fixes",IDC_STATIC,7,168,392,76
|
||||
CONTROL "VU Clip Hack - Special fix for God of War; Breaks Rockstar games!",IDC_VUCLIPHACK,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,211,323,10
|
||||
CONTROL "VU Mini Hack - Special fix for Grand Turismo 4",IDC_VUMINIHACK,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,224,323,10
|
||||
END
|
||||
|
||||
|
||||
|
@ -986,9 +990,9 @@ BEGIN
|
|||
IDD_HACKS, DIALOG
|
||||
BEGIN
|
||||
LEFTMARGIN, 7
|
||||
RIGHTMARGIN, 398
|
||||
RIGHTMARGIN, 399
|
||||
TOPMARGIN, 7
|
||||
BOTTOMMARGIN, 244
|
||||
BOTTOMMARGIN, 266
|
||||
END
|
||||
END
|
||||
#endif // APSTUDIO_INVOKED
|
||||
|
|
|
@ -606,7 +606,10 @@
|
|||
#define IDC_CHECK1 1300
|
||||
#define IDC_SOUNDHACK 1300
|
||||
#define IDC_DENORMALS 1301
|
||||
#define IDC_SOUNDHACK2 1302
|
||||
#define IDC_VUCLIPHACK 1302
|
||||
#define IDC_FRAMELIMIT_OPTIONS 1303
|
||||
#define IDC_VUMINIHACK 1303
|
||||
#define IDC_LOG 1500
|
||||
#define IDC_CPULOG 1500
|
||||
#define IDC_MEMLOG 1501
|
||||
|
|
|
@ -3351,12 +3351,12 @@ void recVUMI_MAXw(VURegs *VU, int info) { recVUMI_MAX_xyzw(VU, 3, info); }
|
|||
void recVUMI_MINI(VURegs *VU, int info)
|
||||
{
|
||||
if ( _Fd_ == 0 ) return;
|
||||
if (CHECK_EXTRA_OVERFLOW) {
|
||||
vuFloat2( EEREC_S, EEREC_TEMP, _X_Y_Z_W);
|
||||
vuFloat2( EEREC_T, EEREC_TEMP, _X_Y_Z_W);
|
||||
}
|
||||
|
||||
if( _X_Y_Z_W == 8 ) {
|
||||
if (CHECK_EXTRA_OVERFLOW) {
|
||||
vuFloat2( EEREC_S, EEREC_TEMP, 8);
|
||||
vuFloat2( EEREC_T, EEREC_TEMP, 8);
|
||||
}
|
||||
if (EEREC_D == EEREC_S) SSE_MINSS_XMM_to_XMM(EEREC_D, EEREC_T);
|
||||
else if (EEREC_D == EEREC_T) SSE_MINSS_XMM_to_XMM(EEREC_D, EEREC_S);
|
||||
else {
|
||||
|
@ -3365,6 +3365,10 @@ void recVUMI_MINI(VURegs *VU, int info)
|
|||
}
|
||||
}
|
||||
else if (_X_Y_Z_W != 0xf) {
|
||||
if (CHECK_EXTRA_OVERFLOW) {
|
||||
vuFloat2( EEREC_S, EEREC_TEMP, _X_Y_Z_W);
|
||||
vuFloat2( EEREC_T, EEREC_TEMP, _X_Y_Z_W);
|
||||
}
|
||||
SSE_MOVAPS_XMM_to_XMM(EEREC_TEMP, EEREC_S);
|
||||
SSE_MINPS_XMM_to_XMM(EEREC_TEMP, EEREC_T);
|
||||
|
||||
|
@ -3372,16 +3376,28 @@ void recVUMI_MINI(VURegs *VU, int info)
|
|||
}
|
||||
else {
|
||||
if( EEREC_D == EEREC_S ) {
|
||||
// need for GT4 vu0rec
|
||||
//ClampUnordered(EEREC_T, EEREC_TEMP, 0);
|
||||
if (CHECK_VUMINIHACK)
|
||||
ClampUnordered(EEREC_T, EEREC_TEMP, 0); // need for GT4 vu0rec
|
||||
else if (CHECK_EXTRA_OVERFLOW) {
|
||||
vuFloat2( EEREC_S, EEREC_TEMP, _X_Y_Z_W);
|
||||
vuFloat2( EEREC_T, EEREC_TEMP, _X_Y_Z_W);
|
||||
}
|
||||
SSE_MINPS_XMM_to_XMM(EEREC_D, EEREC_T);
|
||||
}
|
||||
else if( EEREC_D == EEREC_T ) {
|
||||
// need for GT4 vu0rec
|
||||
//ClampUnordered(EEREC_S, EEREC_TEMP, 0);
|
||||
if (CHECK_VUMINIHACK)
|
||||
ClampUnordered(EEREC_S, EEREC_TEMP, 0); // need for GT4 vu0rec
|
||||
else if (CHECK_EXTRA_OVERFLOW) {
|
||||
vuFloat2( EEREC_S, EEREC_TEMP, _X_Y_Z_W);
|
||||
vuFloat2( EEREC_T, EEREC_TEMP, _X_Y_Z_W);
|
||||
}
|
||||
SSE_MINPS_XMM_to_XMM(EEREC_D, EEREC_S);
|
||||
}
|
||||
else {
|
||||
if (CHECK_EXTRA_OVERFLOW) {
|
||||
vuFloat2( EEREC_S, EEREC_TEMP, _X_Y_Z_W);
|
||||
vuFloat2( EEREC_T, EEREC_TEMP, _X_Y_Z_W);
|
||||
}
|
||||
SSE_MOVAPS_XMM_to_XMM(EEREC_D, EEREC_S);
|
||||
SSE_MINPS_XMM_to_XMM(EEREC_D, EEREC_T);
|
||||
}
|
||||
|
@ -3664,7 +3680,7 @@ void recVUMI_CLIP(VURegs *VU, int info)
|
|||
x86temp1 = ALLOCTEMPX86(MODE_8BITREG);
|
||||
x86temp2 = ALLOCTEMPX86(MODE_8BITREG);
|
||||
|
||||
if ( (x86temp1 == 0) || (x86temp2 == 0) ) SysPrintf("VU CLIP Allocation Error: EAX being allocated!");
|
||||
//if ( (x86temp1 == 0) || (x86temp2 == 0) ) SysPrintf("VU CLIP Allocation Error: EAX being allocated! \n");
|
||||
|
||||
if( _Ft_ == 0 ) {
|
||||
// all 1s
|
||||
|
@ -3699,9 +3715,11 @@ void recVUMI_CLIP(VURegs *VU, int info)
|
|||
AND32ItoR(EAX, 0xffffff);
|
||||
|
||||
MOV32RtoM(clipaddr, EAX);
|
||||
MOV32RtoM((uptr)&VU->VI[REG_CLIP_FLAG], EAX);
|
||||
|
||||
//if( !(info&(PROCESS_VU_SUPER|PROCESS_VU_COP2)) ) MOV32RtoM((uptr)&VU->VI[REG_CLIP_FLAG], EAX);
|
||||
// God of War needs this additional move, but it breaks Rockstar games; ideally this hack shouldn't be needed, i think its a clipflag allocation bug in iVUzerorec.cpp
|
||||
if ( ( CHECK_VUCLIPHACK ) || ( !(info & (PROCESS_VU_SUPER|PROCESS_VU_COP2)) ) )
|
||||
MOV32RtoM((uptr)&VU->VI[REG_CLIP_FLAG], EAX);
|
||||
|
||||
//_freeXMMreg(t1reg); // We Never Allocated these regs, so no need to free them
|
||||
//_freeXMMreg(t2reg);
|
||||
|
||||
|
|
Loading…
Reference in New Issue