From 37af25e03dd132c691aa2ff9709e439b4eb9e0ad Mon Sep 17 00:00:00 2001 From: NeoBrainX Date: Sun, 13 Jan 2013 10:49:33 +0100 Subject: [PATCH] Revert my dual-core fix for FifoPlayer. Apparently it breaks more than it fixes. This reverts commit bab9b5d3ce14c5b9cb55bd34da4851672e287467. --- .../Core/Core/Src/FifoPlayer/FifoPlayer.cpp | 42 +------------------ Source/Core/Core/Src/FifoPlayer/FifoPlayer.h | 1 - 2 files changed, 1 insertion(+), 42 deletions(-) diff --git a/Source/Core/Core/Src/FifoPlayer/FifoPlayer.cpp b/Source/Core/Core/Src/FifoPlayer/FifoPlayer.cpp index 1873a91574..ff90736fec 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoPlayer.cpp +++ b/Source/Core/Core/Src/FifoPlayer/FifoPlayer.cpp @@ -20,7 +20,6 @@ #include "Common.h" #include "CoreTiming.h" -#include "Thread.h" #include "HW/GPFifo.h" #include "HW/Memmap.h" @@ -28,7 +27,6 @@ #include "PowerPC/PowerPC.h" #include "BPMemory.h" -#include "CommandProcessor.h" FifoPlayer::~FifoPlayer() { @@ -96,40 +94,7 @@ bool FifoPlayer::Play() if (m_EarlyMemoryUpdates && m_CurrentFrame == m_FrameRangeStart) WriteAllMemoryUpdates(); - // Stop Fifo processing until we've written the new frame - WriteCP(CommandProcessor::CTRL_REGISTER, 0x10); // disable read & breakpoints, enable GP link - - // Write frame data - WriteFrame(m_File->GetFrame(m_CurrentFrame), m_FrameInfo[m_CurrentFrame]); - - // Enable frame processing and break when done - u16 write_ptr_lo = ReadCP(CommandProcessor::FIFO_WRITE_POINTER_LO); - u16 write_ptr_hi = ReadCP(CommandProcessor::FIFO_WRITE_POINTER_HI); - WriteCP(CommandProcessor::FIFO_BP_LO, write_ptr_lo); - WriteCP(CommandProcessor::FIFO_BP_HI, write_ptr_hi); - WriteCP(CommandProcessor::CTRL_REGISTER, 0x13); // enable read, breakpoints & GP link - - // If necessary, wait until GP has reached the breakpoint to prevent fifo overflows - // TODO: Can this be done any better? Dual core mode is slower than single core mode even with these conditions.. - if (m_CurrentFrame < m_FrameRangeEnd) - { - // Check if FIFO would be overflown when writing the next frame - u32 CPRWDistance = (ReadCP(CommandProcessor::FIFO_RW_DISTANCE_HI)<<16) | ReadCP(CommandProcessor::FIFO_RW_DISTANCE_LO); - CPRWDistance += m_File->GetFrame(m_CurrentFrame+1).fifoDataSize + CommandProcessor::GATHER_PIPE_SIZE; - u32 CPFifoBase = (ReadCP(CommandProcessor::FIFO_BASE_HI)<<16) | ReadCP(CommandProcessor::FIFO_BASE_LO); - u32 CPFifoEnd = (ReadCP(CommandProcessor::FIFO_END_HI)<<16) | ReadCP(CommandProcessor::FIFO_END_LO); - - bool bWait = (CPRWDistance > CPFifoEnd - CPFifoBase); - while (bWait && (ReadCP(CommandProcessor::FIFO_READ_POINTER_LO) != write_ptr_lo || - ReadCP(CommandProcessor::FIFO_READ_POINTER_HI) != write_ptr_hi)) - { - Common::YieldCPU(); - CoreTiming::Advance(); // Process scheduled events (esp. PixelEngine::SetFinish!) - - if (PowerPC::GetState() == PowerPC::CPU_POWERDOWN) - break; - } - } + WriteFrame(m_File->GetFrame(m_CurrentFrame), m_FrameInfo[m_CurrentFrame]); ++m_CurrentFrame; } @@ -422,11 +387,6 @@ void FifoPlayer::LoadMemory() FlushWGP(); } -u16 FifoPlayer::ReadCP(u32 address) -{ - return Memory::Read_U16(0xCC000000 | address); -} - void FifoPlayer::WriteCP(u32 address, u16 value) { Memory::Write_U16(value, 0xCC000000 | address); diff --git a/Source/Core/Core/Src/FifoPlayer/FifoPlayer.h b/Source/Core/Core/Src/FifoPlayer/FifoPlayer.h index 838ac13f18..9db6c0d980 100644 --- a/Source/Core/Core/Src/FifoPlayer/FifoPlayer.h +++ b/Source/Core/Core/Src/FifoPlayer/FifoPlayer.h @@ -87,7 +87,6 @@ private: void LoadMemory(); - u16 ReadCP(u32 address); void WriteCP(u32 address, u16 value); void WritePI(u32 address, u32 value);