mirror of
https://github.com/stenzek/duckstation.git
synced 2025-06-07 12:05:52 +00:00
GPU: Force early run on GP0 FIFO overflow
And don't crash if a game spams GP0 writes and it overflows.
This commit is contained in:
parent
9939f1cd05
commit
95797b05f1
@ -531,6 +531,19 @@ void GPU::WriteRegister(u32 offset, u32 value)
|
|||||||
if (m_gpu_dump) [[unlikely]]
|
if (m_gpu_dump) [[unlikely]]
|
||||||
m_gpu_dump->WriteGP0Packet(value);
|
m_gpu_dump->WriteGP0Packet(value);
|
||||||
|
|
||||||
|
// FIFO can be overflowed through direct GP0 writes if the command tick event hasn't run, because
|
||||||
|
// there's no backpressure applied to the CPU. Instead force the GPU to run and catch up.
|
||||||
|
if (m_fifo.GetSize() >= m_fifo_size) [[unlikely]]
|
||||||
|
{
|
||||||
|
s_command_tick_event.InvokeEarly();
|
||||||
|
|
||||||
|
if (m_fifo.GetSize() >= m_fifo.GetCapacity()) [[unlikely]]
|
||||||
|
{
|
||||||
|
WARNING_LOG("GPU FIFO overflow via GP0 write, size={}", m_fifo.GetSize());
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
m_fifo.Push(value);
|
m_fifo.Push(value);
|
||||||
ExecuteCommands();
|
ExecuteCommands();
|
||||||
return;
|
return;
|
||||||
|
Loading…
x
Reference in New Issue
Block a user