diff options
| author | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-06-29 12:43:20 +0000 |
|---|---|---|
| committer | SND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97> | 2010-06-29 12:43:20 +0000 |
| commit | d990e3b4440607521be8d79df828f2c50449bd6e (patch) | |
| tree | 361843be33c7c4cfdd840d94ef02b4125fbdc791 /plugins/dfxvideo/gpu.c | |
| parent | 3e6470958953dd45ef15fb7c6cf6302084ec2013 (diff) | |
| download | pcsxr-d990e3b4440607521be8d79df828f2c50449bd6e.tar.gz | |
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@53840 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'plugins/dfxvideo/gpu.c')
| -rw-r--r-- | plugins/dfxvideo/gpu.c | 30 |
1 files changed, 25 insertions, 5 deletions
diff --git a/plugins/dfxvideo/gpu.c b/plugins/dfxvideo/gpu.c index b5addb98..7dd359ff 100644 --- a/plugins/dfxvideo/gpu.c +++ b/plugins/dfxvideo/gpu.c @@ -105,7 +105,8 @@ PSXDisplay_t PreviousPSXDisplay; long lSelectedSlot=0; BOOL bChangeWinMode=FALSE; BOOL bDoLazyUpdate=FALSE; -uint32_t lGPUInfoVals[16]; +uint32_t lGPUInfoVals[16]; +static int iFakePrimBusy=0; //////////////////////////////////////////////////////////////////////// // some misc external display funcs @@ -824,14 +825,29 @@ uint32_t CALLBACK GPUreadStatus(void) // READ STATUS { if(dwActFixes&1) { - static int iNumRead=0; // odd/even hack + static int iNumRead=0; // odd/even hack if((iNumRead++)==2) { iNumRead=0; - lGPUstatusRet^=0x80000000; // interlaced bit toggle... we do it on every 3 read status... needed by some games (like ChronoCross) with old epsxe versions (1.5.2 and older) + lGPUstatusRet^=0x80000000; // interlaced bit toggle... we do it on every 3 read status... needed by some games (like ChronoCross) with old epsxe versions (1.5.2 and older) } } + if(iFakePrimBusy) // 27.10.2007 - PETE : emulating some 'busy' while drawing... pfff + { + iFakePrimBusy--; + + if(iFakePrimBusy&1) // we do a busy-idle-busy-idle sequence after/while drawing prims + { + GPUIsBusy; + GPUIsNotReadyForCommands; + } + else + { + GPUIsIdle; + GPUIsReadyForCommands; + } + } return lGPUstatusRet; } @@ -1386,7 +1402,8 @@ ENDVRAM: { gpuDataC=gpuDataP=0; primFunc[gpuCommand]((unsigned char *)gpuDataM); - } + if(dwEmuFixes&0x0001 || dwActFixes&0x0400) // hack for emulating "gpu busy" in some games + iFakePrimBusy=4;
} } } @@ -1929,4 +1946,7 @@ void CALLBACK GPUshowScreenPic(unsigned char * pMem) CreatePic(pMem); // create new pic... don't free pMem or something like that... just read from it } -//////////////////////////////////////////////////////////////////////// +void CALLBACK GPUsetfix(uint32_t dwFixBits) +{ + dwEmuFixes=dwFixBits; +} |
