From c6d8b52d2691d2a203f5a9cda7d4c9a72b871712 Mon Sep 17 00:00:00 2001 From: Gregory Hainaut Date: Thu, 1 May 2014 16:35:24 +0200 Subject: [PATCH] pcsx2: try to ensure better sync with FIFO read call First wait will ensure correctness of GS register. 2nd wait will ensure that the GS fifo read call is finished (If I understand MTGS correctly) --- pcsx2/FiFo.cpp | 3 ++- pcsx2/MTGS.cpp | 2 ++ pcsx2/Vif1_Dma.cpp | 3 ++- 3 files changed, 6 insertions(+), 2 deletions(-) diff --git a/pcsx2/FiFo.cpp b/pcsx2/FiFo.cpp index dc417af315..ed658bc0eb 100644 --- a/pcsx2/FiFo.cpp +++ b/pcsx2/FiFo.cpp @@ -50,8 +50,9 @@ void __fastcall ReadFIFO_VIF1(mem128_t* out) DevCon.Warning("Warning! GS Download size < FIFO count!"); } if (vif1Regs.stat.FQC > 0) { - GetMTGS().SendPointerPacket(GS_RINGTYPE_READ_FIFO1, 0, out); GetMTGS().WaitGS(); + GetMTGS().SendPointerPacket(GS_RINGTYPE_READ_FIFO1, 0, out); + GetMTGS().WaitGS(false); // wait without reg sync vif1.GSLastDownloadSize--; GUNIT_LOG("ReadFIFO_VIF1"); if (vif1.GSLastDownloadSize <= 16) diff --git a/pcsx2/MTGS.cpp b/pcsx2/MTGS.cpp index ba1c8e9d96..abafa728a4 100644 --- a/pcsx2/MTGS.cpp +++ b/pcsx2/MTGS.cpp @@ -496,10 +496,12 @@ void SysMtgsThread::ExecuteTaskInThread() break; case GS_RINGTYPE_READ_FIFO1: + MTGS_LOG( "(MTGS Packet Read) ringtype=Fifo1" ); GSreadFIFO( (u64*)tag.data[1]); break; case GS_RINGTYPE_READ_FIFO2: + MTGS_LOG( "(MTGS Packet Read) ringtype=Fifo2, size=%d", tag.data[0] ); GSreadFIFO2( (u64*)tag.data[1], tag.data[0]); break; diff --git a/pcsx2/Vif1_Dma.cpp b/pcsx2/Vif1_Dma.cpp index 8f3157bc2d..af3fdb0238 100644 --- a/pcsx2/Vif1_Dma.cpp +++ b/pcsx2/Vif1_Dma.cpp @@ -67,8 +67,9 @@ void vif1TransferToMemory() pxAssert(p3.isDone() || !p3.gifTag.isValid); } - GetMTGS().SendPointerPacket(GS_RINGTYPE_READ_FIFO2, size, pMem); GetMTGS().WaitGS(); + GetMTGS().SendPointerPacket(GS_RINGTYPE_READ_FIFO2, size, pMem); + GetMTGS().WaitGS(false); // wait without reg sync pMem += size; if(pMem < pMemEnd) {