Fix crashes in dual core mode on a PI_FIFO_RESET
This commit is contained in:
parent
b6a18b0da5
commit
ab8a8e6f84
|
@ -18,6 +18,7 @@
|
||||||
#include "Core/IOS/IOS.h"
|
#include "Core/IOS/IOS.h"
|
||||||
#include "Core/IOS/STM/STM.h"
|
#include "Core/IOS/STM/STM.h"
|
||||||
#include "Core/PowerPC/PowerPC.h"
|
#include "Core/PowerPC/PowerPC.h"
|
||||||
|
#include "VideoCommon/AsyncRequests.h"
|
||||||
#include "VideoCommon/Fifo.h"
|
#include "VideoCommon/Fifo.h"
|
||||||
|
|
||||||
namespace ProcessorInterface
|
namespace ProcessorInterface
|
||||||
|
@ -108,7 +109,19 @@ void RegisterMMIO(MMIO::Mapping* mmio, u32 base)
|
||||||
if ((val & 1) != 0)
|
if ((val & 1) != 0)
|
||||||
{
|
{
|
||||||
GPFifo::ResetGatherPipe();
|
GPFifo::ResetGatherPipe();
|
||||||
Fifo::ResetVideoBuffer();
|
|
||||||
|
// Call Fifo::ResetVideoBuffer() from the video thread. Since that function
|
||||||
|
// resets various pointers used by the video thread, we can't call it directly
|
||||||
|
// from the CPU thread, so queue a task to do it instead. In single-core mode,
|
||||||
|
// AsyncRequests is in passthrough mode, so this will be safely and immediately
|
||||||
|
// called on the CPU thread.
|
||||||
|
|
||||||
|
// NOTE: GPFifo::ResetGatherPipe() only affects
|
||||||
|
// CPU state, so we can call it directly
|
||||||
|
|
||||||
|
AsyncRequests::Event ev = {};
|
||||||
|
ev.type = AsyncRequests::Event::FIFO_RESET;
|
||||||
|
AsyncRequests::GetInstance()->PushEvent(ev);
|
||||||
}
|
}
|
||||||
}));
|
}));
|
||||||
|
|
||||||
|
|
|
@ -158,6 +158,10 @@ void AsyncRequests::HandleEvent(const AsyncRequests::Event& e)
|
||||||
*e.bbox.data = g_renderer->BBoxRead(e.bbox.index);
|
*e.bbox.data = g_renderer->BBoxRead(e.bbox.index);
|
||||||
break;
|
break;
|
||||||
|
|
||||||
|
case Event::FIFO_RESET:
|
||||||
|
Fifo::ResetVideoBuffer();
|
||||||
|
break;
|
||||||
|
|
||||||
case Event::PERF_QUERY:
|
case Event::PERF_QUERY:
|
||||||
g_perf_query->FlushResults();
|
g_perf_query->FlushResults();
|
||||||
break;
|
break;
|
||||||
|
|
|
@ -27,6 +27,7 @@ public:
|
||||||
EFB_PEEK_Z,
|
EFB_PEEK_Z,
|
||||||
SWAP_EVENT,
|
SWAP_EVENT,
|
||||||
BBOX_READ,
|
BBOX_READ,
|
||||||
|
FIFO_RESET,
|
||||||
PERF_QUERY,
|
PERF_QUERY,
|
||||||
DO_SAVE_STATE,
|
DO_SAVE_STATE,
|
||||||
} type;
|
} type;
|
||||||
|
@ -62,6 +63,10 @@ public:
|
||||||
u16* data;
|
u16* data;
|
||||||
} bbox;
|
} bbox;
|
||||||
|
|
||||||
|
struct
|
||||||
|
{
|
||||||
|
} fifo_reset;
|
||||||
|
|
||||||
struct
|
struct
|
||||||
{
|
{
|
||||||
} perf_query;
|
} perf_query;
|
||||||
|
|
Loading…
Reference in New Issue