summaryrefslogtreecommitdiff
path: root/plugins/dfxvideo/gpu.c
diff options
context:
space:
mode:
authorSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-06-29 12:43:20 +0000
committerSND\weimingzhi_cp <SND\weimingzhi_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2010-06-29 12:43:20 +0000
commitd990e3b4440607521be8d79df828f2c50449bd6e (patch)
tree361843be33c7c4cfdd840d94ef02b4125fbdc791 /plugins/dfxvideo/gpu.c
parent3e6470958953dd45ef15fb7c6cf6302084ec2013 (diff)
downloadpcsxr-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.c30
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;
+}