mirror of https://github.com/PCSX2/pcsx2.git
okay changed what the GT4 speedhack does. use the Check Extra Overflow + FPU Clamp Hack when running GT4!
i might be able to fix the code to not need the hack in the future; but its going to take some major changes :p git-svn-id: http://pcsx2-playground.googlecode.com/svn/trunk@71 a6443dda-0b58-4228-96e9-037be469359c
This commit is contained in:
parent
49459b16bd
commit
d18a21ad37
|
@ -61,7 +61,7 @@
|
|||
#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_FPUCLAMPHACK (Config.Hacks & 0x200) // 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_FRAMELIMIT (Config.Options&PCSX2_FRAMELIMIT_MASK)
|
||||
|
|
|
@ -729,7 +729,7 @@ BOOL APIENTRY HacksProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
|
|||
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);
|
||||
if(Config.Hacks & 0x200) CheckDlgButton(hDlg, IDC_FPUCLAMPHACK, TRUE);
|
||||
|
||||
return TRUE;
|
||||
|
||||
|
@ -745,7 +745,7 @@ BOOL APIENTRY HacksProc(HWND hDlg, UINT message, WPARAM wParam, LPARAM lParam) {
|
|||
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;
|
||||
Config.Hacks |= IsDlgButtonChecked(hDlg, IDC_FPUCLAMPHACK) ? 0x200 : 0;
|
||||
|
||||
SaveConfig();
|
||||
|
||||
|
|
|
@ -967,9 +967,9 @@ BEGIN
|
|||
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
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,227,323,10
|
||||
CONTROL "FPU Clamp Hack - Special fix for Gran Turismo 4 and possibly other games",IDC_FPUCLAMPHACK,
|
||||
"Button",BS_AUTOCHECKBOX | WS_TABSTOP,14,212,323,10
|
||||
END
|
||||
|
||||
|
||||
|
|
|
@ -606,10 +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_VUCLAMPHACK 1303
|
||||
#define IDC_FPUCLAMPHACK 1303
|
||||
#define IDC_LOG 1500
|
||||
#define IDC_CPULOG 1500
|
||||
#define IDC_MEMLOG 1501
|
||||
|
|
|
@ -777,24 +777,27 @@ void ClampValues(regd) {
|
|||
}
|
||||
|
||||
void ClampValues2(regd) {
|
||||
SSE_MAXSS_M32_to_XMM(regd, (uptr)&g_minvals[0]);
|
||||
SSE_MINSS_M32_to_XMM(regd, (uptr)&g_maxvals[0]);
|
||||
/*
|
||||
int t5reg = _allocTempXMMreg(XMMT_FPS, -1);
|
||||
if (CHECK_FPUCLAMPHACK) { // This fixes Gran Turismo graphics
|
||||
|
||||
SSE_XORPS_XMM_to_XMM(t5reg, t5reg);
|
||||
SSE_CMPORDSS_XMM_to_XMM(t5reg, regd);
|
||||
int t5reg = _allocTempXMMreg(XMMT_FPS, -1);
|
||||
|
||||
SSE_ORPS_M128_to_XMM(t5reg, (uptr)s_overflowmask); // fixes katamari falling off podium
|
||||
SSE_XORPS_XMM_to_XMM(t5reg, t5reg);
|
||||
SSE_CMPORDSS_XMM_to_XMM(t5reg, regd);
|
||||
|
||||
SSE_ANDPS_XMM_to_XMM(regd, t5reg);
|
||||
SSE_ORPS_M128_to_XMM(t5reg, (uptr)s_overflowmask); // fixes katamari falling off podium
|
||||
|
||||
// not necessary since above ORPS handles that (i think) Lets enable it for now ;)
|
||||
SSE_MAXSS_M32_to_XMM(regd, (uptr)&g_minvals[0]);
|
||||
SSE_MINSS_M32_to_XMM(regd, (uptr)&g_maxvals[0]);
|
||||
SSE_ANDPS_XMM_to_XMM(regd, t5reg);
|
||||
|
||||
_freeXMMreg(t5reg);
|
||||
*/
|
||||
// not necessary since above ORPS handles that (i think) Lets enable it for now ;)
|
||||
SSE_MAXSS_M32_to_XMM(regd, (uptr)&g_minvals[0]);
|
||||
SSE_MINSS_M32_to_XMM(regd, (uptr)&g_maxvals[0]);
|
||||
|
||||
_freeXMMreg(t5reg);
|
||||
}
|
||||
else {
|
||||
SSE_MAXSS_M32_to_XMM(regd, (uptr)&g_minvals[0]);
|
||||
SSE_MINSS_M32_to_XMM(regd, (uptr)&g_maxvals[0]);
|
||||
}
|
||||
}
|
||||
|
||||
static void (*recComOpXMM_to_XMM[] )(x86SSERegType, x86SSERegType) = {
|
||||
|
|
|
@ -3353,10 +3353,7 @@ void recVUMI_MINI(VURegs *VU, int info)
|
|||
if ( _Fd_ == 0 ) return;
|
||||
|
||||
if( _X_Y_Z_W == 8 ) {
|
||||
if (CHECK_EXTRA_OVERFLOW) {
|
||||
vuFloat2( EEREC_S, EEREC_TEMP, 8);
|
||||
vuFloat2( EEREC_T, EEREC_TEMP, 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,39 +3362,23 @@ 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);
|
||||
}
|
||||
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);
|
||||
|
||||
VU_MERGE_REGS(EEREC_D, EEREC_TEMP);
|
||||
}
|
||||
else {
|
||||
if (CHECK_EXTRA_OVERFLOW) { vuFloat2( EEREC_S, EEREC_TEMP, 0xf); vuFloat2( EEREC_T, EEREC_TEMP, 0xf); }
|
||||
if( EEREC_D == EEREC_S ) {
|
||||
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);
|
||||
}
|
||||
//ClampUnordered(EEREC_T, EEREC_TEMP, 0); // need for GT4 vu0rec
|
||||
SSE_MINPS_XMM_to_XMM(EEREC_D, EEREC_T);
|
||||
}
|
||||
else if( EEREC_D == EEREC_T ) {
|
||||
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);
|
||||
}
|
||||
//ClampUnordered(EEREC_S, EEREC_TEMP, 0); // need for GT4 vu0rec
|
||||
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);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue