summaryrefslogtreecommitdiff
path: root/libpcsxcore/gpu.c
diff options
context:
space:
mode:
authorSND\ckain_cp <SND\ckain_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2013-03-06 17:49:50 +0000
committerSND\ckain_cp <SND\ckain_cp@e17a0e51-4ae3-4d35-97c3-1a29b211df97>2013-03-06 17:49:50 +0000
commitd0c76b09e921ab68b61ac1c1de6feb071fe19637 (patch)
treea2185c3a2607cf004be62cbbdb6a63e1e79dd67f /libpcsxcore/gpu.c
parent7b6f0ceec2e6fc7b92a7bf7b2814c9813114b964 (diff)
downloadpcsxr-d0c76b09e921ab68b61ac1c1de6feb071fe19637.tar.gz
mem2vram: delay based on BS size. Fixes X-Files videos. Seems not break other videos or games.
git-svn-id: https://pcsxr.svn.codeplex.com/svn/pcsxr@83403 e17a0e51-4ae3-4d35-97c3-1a29b211df97
Diffstat (limited to 'libpcsxcore/gpu.c')
-rwxr-xr-xlibpcsxcore/gpu.c24
1 files changed, 12 insertions, 12 deletions
diff --git a/libpcsxcore/gpu.c b/libpcsxcore/gpu.c
index 992eb536..1c24ada3 100755
--- a/libpcsxcore/gpu.c
+++ b/libpcsxcore/gpu.c
@@ -99,7 +99,7 @@ int gpuReadStatus() {
void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU
u32 *ptr;
- u32 size;
+ u32 size, bs;
switch (chcr) {
case 0x01000200: // vram2mem
@@ -108,8 +108,8 @@ void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU
#endif
ptr = (u32 *)PSXM(madr);
if (ptr == NULL) {
-#ifdef CPU_LOG
- CPU_LOG("*** DMA2 GPU - vram2mem *** NULL Pointer!!!\n");
+#ifdef PSXDMA_LOG
+ PSXDMA_LOG("*** DMA2 GPU - vram2mem *** NULL Pointer!!!\n");
#endif
break;
}
@@ -128,27 +128,27 @@ void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU
return;
case 0x01000201: // mem2vram
+ bs=(bcr & 0xffff);
+ size = (bcr >> 16) * bs; // BA blocks * BS words (word = 32-bits)
#ifdef PSXDMA_LOG
- PSXDMA_LOG("*** DMA 2 - GPU mem2vram *** %lx addr = %lx size = %lx\n", chcr, madr, bcr);
+ PSXDMA_LOG("*** DMA 2 - GPU mem2vram *** %lx addr = %lxh, BCR %lxh => size %d = BA(%d) * BS(%xh)\n",
+ chcr, madr, bcr, size, size / bs, size / (bcr >> 16));
#endif
ptr = (u32 *)PSXM(madr);
if (ptr == NULL) {
-#ifdef CPU_LOG
- CPU_LOG("*** DMA2 GPU - mem2vram *** NULL Pointer!!!\n");
+#ifdef PSXDMA_LOG
+ PSXDMA_LOG("*** DMA2 GPU - mem2vram *** NULL Pointer!!!\n");
#endif
break;
}
- // BA blocks * BS words (word = 32-bits)
- size = (bcr >> 16) * (bcr & 0xffff);
GPU_writeDataMem(ptr, size);
-#if 1
+#if 0
// already 32-bit word size ((size * 4) / 4)
GPUDMA_INT(size);
#else
- // Experimental burst dma transfer
- // - X-Files = 0.333333x max for videos
- GPUDMA_INT( size / 3 );
+ // X-Files video interlace. Experimental delay depending of BS.
+ GPUDMA_INT( (7 * size) / bs );
#endif
return;