notaz.gp2x.de
/
pcsx_rearmed.git
/ commitdiff
commit
grep
author
committer
pickaxe
?
search:
re
summary
|
shortlog
|
log
|
commit
| commitdiff |
tree
raw
|
patch
|
inline
| side by side (from parent 1:
4e44d6f
)
gpus: return DMA word count to avoid 1 list walk
author
notaz
<notasas@gmail.com>
Fri, 24 Jun 2011 22:49:35 +0000
(
01:49
+0300)
committer
notaz
<notasas@gmail.com>
Thu, 7 Jul 2011 21:15:08 +0000
(
00:15
+0300)
libpcsxcore/psxdma.c
patch
|
blob
|
blame
|
history
plugins/dfxvideo/gpu.c
patch
|
blob
|
blame
|
history
plugins/gpu_unai/gpu.cpp
patch
|
blob
|
blame
|
history
plugins/gpu_unai/port.h
patch
|
blob
|
blame
|
history
diff --git
a/libpcsxcore/psxdma.c
b/libpcsxcore/psxdma.c
index
1274d93
..
df79b6d
100644
(file)
--- a/
libpcsxcore/psxdma.c
+++ b/
libpcsxcore/psxdma.c
@@
-167,8
+167,9
@@
void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU
PSXDMA_LOG("*** DMA 2 - GPU dma chain *** %lx addr = %lx size = %lx\n", chcr, madr, bcr);
#endif
PSXDMA_LOG("*** DMA 2 - GPU dma chain *** %lx addr = %lx size = %lx\n", chcr, madr, bcr);
#endif
- size = gpuDmaChainSize(madr);
- GPU_dmaChain((u32 *)psxM, madr & 0x1fffff);
+ size = GPU_dmaChain((u32 *)psxM, madr & 0x1fffff);
+ if ((int)size <= 0)
+ size = gpuDmaChainSize(madr);
// Tekken 3 = use 1.0 only (not 1.5x)
// Tekken 3 = use 1.0 only (not 1.5x)
diff --git
a/plugins/dfxvideo/gpu.c
b/plugins/dfxvideo/gpu.c
index
9a614de
..
0d105f8
100644
(file)
--- a/
plugins/dfxvideo/gpu.c
+++ b/
plugins/dfxvideo/gpu.c
@@
-1042,6
+1042,7
@@
long CALLBACK GPUdmaChain(uint32_t * baseAddrL, uint32_t addr)
uint32_t dmaMem;
unsigned char * baseAddrB;
short count;unsigned int DMACommandCounter = 0;
uint32_t dmaMem;
unsigned char * baseAddrB;
short count;unsigned int DMACommandCounter = 0;
+ long dmaWords = 0;
GPUIsBusy;
GPUIsBusy;
@@
-1056,6
+1057,7
@@
long CALLBACK GPUdmaChain(uint32_t * baseAddrL, uint32_t addr)
if(CheckForEndlessLoop(addr)) break;
count = baseAddrB[addr+3];
if(CheckForEndlessLoop(addr)) break;
count = baseAddrB[addr+3];
+ dmaWords += 1 + count;
dmaMem=addr+4;
dmaMem=addr+4;
@@
-1067,7
+1069,7
@@
long CALLBACK GPUdmaChain(uint32_t * baseAddrL, uint32_t addr)
GPUIsIdle;
GPUIsIdle;
- return
0
;
+ return
dmaWords
;
}
////////////////////////////////////////////////////////////////////////
}
////////////////////////////////////////////////////////////////////////
diff --git
a/plugins/gpu_unai/gpu.cpp
b/plugins/gpu_unai/gpu.cpp
index
808c891
..
9b0a0dc
100644
(file)
--- a/
plugins/gpu_unai/gpu.cpp
+++ b/
plugins/gpu_unai/gpu.cpp
@@
-331,7
+331,7
@@
INLINE int CheckForEndlessLoop(u32 *laddr)
}
///////////////////////////////////////////////////////////////////////////////
}
///////////////////////////////////////////////////////////////////////////////
-
void
GPU_dmaChain(u32* baseAddr, u32 dmaVAddr)
+
long
GPU_dmaChain(u32* baseAddr, u32 dmaVAddr)
{
#ifdef DEBUG_ANALYSIS
dbg_anacnt_GPU_dmaChain++;
{
#ifdef DEBUG_ANALYSIS
dbg_anacnt_GPU_dmaChain++;
@@
-339,6
+339,7
@@
void GPU_dmaChain(u32* baseAddr, u32 dmaVAddr)
pcsx4all_prof_start_with_pause(PCSX4ALL_PROF_GPU,PCSX4ALL_PROF_HW_WRITE);
u32 data, *address, count, offset;
unsigned int DMACommandCounter = 0;
pcsx4all_prof_start_with_pause(PCSX4ALL_PROF_GPU,PCSX4ALL_PROF_HW_WRITE);
u32 data, *address, count, offset;
unsigned int DMACommandCounter = 0;
+ long dma_words = 0;
GPU_GP1 &= ~0x14000000;
lUsedAddr[0]=lUsedAddr[1]=lUsedAddr[2]=(u32*)0x1fffff;
GPU_GP1 &= ~0x14000000;
lUsedAddr[0]=lUsedAddr[1]=lUsedAddr[2]=(u32*)0x1fffff;
@@
-355,9
+356,12
@@
void GPU_dmaChain(u32* baseAddr, u32 dmaVAddr)
else dmaVAddr = 0x1FFFFF;
if(count>0) GPU_writeDataMem(address,count);
else dmaVAddr = 0x1FFFFF;
if(count>0) GPU_writeDataMem(address,count);
+ dma_words += 1 + count;
}
GPU_GP1 = (GPU_GP1 | 0x14000000) & ~0x60000000;
pcsx4all_prof_end_with_resume(PCSX4ALL_PROF_GPU,PCSX4ALL_PROF_HW_WRITE);
}
GPU_GP1 = (GPU_GP1 | 0x14000000) & ~0x60000000;
pcsx4all_prof_end_with_resume(PCSX4ALL_PROF_GPU,PCSX4ALL_PROF_HW_WRITE);
+
+ return dma_words;
}
///////////////////////////////////////////////////////////////////////////////
}
///////////////////////////////////////////////////////////////////////////////
diff --git
a/plugins/gpu_unai/port.h
b/plugins/gpu_unai/port.h
index
3561acd
..
238b98b
100644
(file)
--- a/
plugins/gpu_unai/port.h
+++ b/
plugins/gpu_unai/port.h
@@
-23,7
+23,7
@@
extern "C" {
bool GPUinit(void);
void GPUshutdown(void);
void GPUwriteDataMem(u32* dmaAddress, s32 dmaCount);
bool GPUinit(void);
void GPUshutdown(void);
void GPUwriteDataMem(u32* dmaAddress, s32 dmaCount);
-
void
GPUdmaChain(u32* baseAddr, u32 dmaVAddr);
+
long
GPUdmaChain(u32* baseAddr, u32 dmaVAddr);
void GPUwriteData(u32 data);
void GPUreadDataMem(u32* dmaAddress, s32 dmaCount);
u32 GPUreadData(void);
void GPUwriteData(u32 data);
void GPUreadDataMem(u32* dmaAddress, s32 dmaCount);
u32 GPUreadData(void);