Compare commits

...

4 Commits

Author SHA1 Message Date
JMC47
8c2791dd6f
Merge f72f046bf1 into 80ea68b13c 2024-11-11 13:07:54 -06:00
JMC47
80ea68b13c
Merge pull request #13183 from Tilka/sync_on_fifo_reset
ProcessorInterface: sync GPU just before PI_FIFO_RESET
2024-11-11 00:38:26 -05:00
Tillmann Karras
fbce737415 ProcessorInterface: sync GPU just before PI_FIFO_RESET
GXAbortFrame() is problematic for Dolphin because it first writes
PI_FIFO_RESET (for which we discard our internal fifo), then disables CP
reads (for which we execute pending commands in the GP fifo in emulated
memory). I don't know whether there is a race condition on hardware, but
there is one for us. Avoid this by also doing a GPU sync here.
2024-11-09 03:29:05 +00:00
JMC47
f72f046bf1 Fix Aspect Ratio Swapping in Metroid Prime 2 2023-09-05 13:58:39 -04:00
2 changed files with 9 additions and 0 deletions

View File

@ -13,6 +13,11 @@ CPUThread = False
[Video_Settings] [Video_Settings]
SafeTextureCacheColorSamples = 512 SafeTextureCacheColorSamples = 512
# Using a widescreen heuristic modification
# fixes the game changing aspect ratios during gameplay.
WidescreenHeuristicTransitionThreshold = 20
# Because the minimap has a lot of unused triangles, # Because the minimap has a lot of unused triangles,
# CPU Cull can greatly speed up demanding areas of the game. # CPU Cull can greatly speed up demanding areas of the game.

View File

@ -98,6 +98,10 @@ void ProcessorInterfaceManager::RegisterMMIO(MMIO::Mapping* mmio, u32 base)
{ {
system.GetGPFifo().ResetGatherPipe(); system.GetGPFifo().ResetGatherPipe();
// Assume that all bytes that made it into the GPU fifo did in fact execute
// before this MMIO write takes effect.
system.GetFifo().SyncGPUForRegisterAccess();
// Call Fifo::ResetVideoBuffer() from the video thread. Since that function // Call Fifo::ResetVideoBuffer() from the video thread. Since that function
// resets various pointers used by the video thread, we can't call it directly // 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, // from the CPU thread, so queue a task to do it instead. In single-core mode,