mirror of
https://github.com/RetroDECK/Duckstation.git
synced 2024-11-23 14:25:37 +00:00
CPU/Recompiler: Use PGXP interpreter for fallback
Fixes holes in geometry with PGXP enabled in Threads of Fate.
This commit is contained in:
parent
4e87b30b40
commit
c9240eea72
|
@ -193,7 +193,7 @@ static void ExecuteImpl()
|
|||
CodeBlock* block = LookupBlock(next_block_key);
|
||||
if (!block)
|
||||
{
|
||||
InterpretUncachedBlock();
|
||||
InterpretUncachedBlock<pgxp_mode>();
|
||||
continue;
|
||||
}
|
||||
|
||||
|
@ -629,8 +629,10 @@ void FastCompileBlockFunction()
|
|||
CodeBlock* block = LookupBlock(GetNextBlockKey());
|
||||
if (block)
|
||||
s_single_block_asm_dispatcher(block->host_code);
|
||||
else if (g_settings.gpu_pgxp_enable)
|
||||
InterpretUncachedBlock<PGXPMode::Memory>();
|
||||
else
|
||||
InterpretUncachedBlock();
|
||||
InterpretUncachedBlock<PGXPMode::Disabled>();
|
||||
}
|
||||
|
||||
#endif
|
||||
|
|
|
@ -126,6 +126,8 @@ void InvalidateBlocksWithPageIndex(u32 page_index);
|
|||
|
||||
template<PGXPMode pgxp_mode>
|
||||
void InterpretCachedBlock(const CodeBlock& block);
|
||||
|
||||
template<PGXPMode pgxp_mode>
|
||||
void InterpretUncachedBlock();
|
||||
|
||||
/// Invalidates any code pages which overlap the specified range.
|
||||
|
|
|
@ -1856,6 +1856,7 @@ template void InterpretCachedBlock<PGXPMode::Disabled>(const CodeBlock& block);
|
|||
template void InterpretCachedBlock<PGXPMode::Memory>(const CodeBlock& block);
|
||||
template void InterpretCachedBlock<PGXPMode::CPU>(const CodeBlock& block);
|
||||
|
||||
template<PGXPMode pgxp_mode>
|
||||
void InterpretUncachedBlock()
|
||||
{
|
||||
g_state.regs.npc = g_state.regs.pc;
|
||||
|
@ -1890,7 +1891,7 @@ void InterpretUncachedBlock()
|
|||
}
|
||||
|
||||
// execute the instruction we previously fetched
|
||||
ExecuteInstruction<PGXPMode::Disabled>();
|
||||
ExecuteInstruction<pgxp_mode>();
|
||||
|
||||
// next load delay
|
||||
UpdateLoadDelay();
|
||||
|
@ -1905,6 +1906,10 @@ void InterpretUncachedBlock()
|
|||
}
|
||||
}
|
||||
|
||||
template void InterpretUncachedBlock<PGXPMode::Disabled>();
|
||||
template void InterpretUncachedBlock<PGXPMode::Memory>();
|
||||
template void InterpretUncachedBlock<PGXPMode::CPU>();
|
||||
|
||||
} // namespace CodeCache
|
||||
|
||||
namespace Recompiler::Thunks {
|
||||
|
|
Loading…
Reference in a new issue