gpus: return DMA word count to avoid 1 list walk
[pcsx_rearmed.git] / libpcsxcore / psxdma.c
index b7d6d6a..df79b6d 100644 (file)
@@ -140,7 +140,7 @@ void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU
                        psxCpu->Clear(madr, size);
 
                        // already 32-bit word size ((size * 4) / 4)
                        psxCpu->Clear(madr, size);
 
                        // already 32-bit word size ((size * 4) / 4)
-                       GPUDMA_INT(size);
+                       GPUDMA_INT(size / 4);
                        return;
 
                case 0x01000201: // mem2vram
                        return;
 
                case 0x01000201: // mem2vram
@@ -159,7 +159,7 @@ void psxDma2(u32 madr, u32 bcr, u32 chcr) { // GPU
                        GPU_writeDataMem(ptr, size);
 
                        // already 32-bit word size ((size * 4) / 4)
                        GPU_writeDataMem(ptr, size);
 
                        // already 32-bit word size ((size * 4) / 4)
-                       GPUDMA_INT(size);
+                       GPUDMA_INT(size / 4);
                        return;
 
                case 0x01000401: // dma chain
                        return;
 
                case 0x01000401: // dma chain
@@ -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)