Skip loading unknown XF registers in the FIFO player

This avoids some warnings, which were originally fixed by ignoring loads with a value of zero (see 636bedb207 / #3242).

Note that FifoCI will report some changes, but only on the first frame; these seem to be timing related as they don't happen if a different write is used to replace skipped ones.
This commit is contained in:
Pokechu22
2021-03-26 22:35:32 -07:00
parent cde6cf2ab5
commit f32b771f7a
4 changed files with 30 additions and 11 deletions

View File

@ -491,7 +491,10 @@ void FifoPlayer::LoadRegisters()
regs = m_File->GetXFRegs();
for (int i = 0; i < FifoDataFile::XF_REGS_SIZE; ++i)
LoadXFReg(i, regs[i]);
{
if (ShouldLoadXF(i))
LoadXFReg(i, regs[i]);
}
}
void FifoPlayer::LoadTextureMemory()
@ -571,6 +574,16 @@ bool FifoPlayer::ShouldLoadBP(u8 address)
}
}
bool FifoPlayer::ShouldLoadXF(u8 reg)
{
// Ignore unknown addresses
u16 address = reg + 0x1000;
return !(address == XFMEM_UNKNOWN_1007 ||
(address >= XFMEM_UNKNOWN_GROUP_1_START && address <= XFMEM_UNKNOWN_GROUP_1_END) ||
(address >= XFMEM_UNKNOWN_GROUP_2_START && address <= XFMEM_UNKNOWN_GROUP_2_END) ||
(address >= XFMEM_UNKNOWN_GROUP_3_START && address <= XFMEM_UNKNOWN_GROUP_3_END));
}
bool FifoPlayer::IsIdleSet()
{
CommandProcessor::UCPStatusReg status =

View File

@ -134,6 +134,7 @@ private:
void LoadXFMem16(u16 address, const u32* data);
bool ShouldLoadBP(u8 address);
bool ShouldLoadXF(u8 address);
static bool IsIdleSet();
static bool IsHighWatermarkSet();