mirror of
https://github.com/dolphin-emu/dolphin.git
synced 2025-02-07 06:40:12 +00:00
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 636bedb207784db2d58b9986464f6a863677b59e / #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:
parent
cde6cf2ab5
commit
f32b771f7a
@ -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 =
|
||||
|
@ -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();
|
||||
|
@ -199,7 +199,8 @@ enum
|
||||
XFMEM_STATE1 = 0x1003,
|
||||
XFMEM_CLOCK = 0x1004,
|
||||
XFMEM_CLIPDISABLE = 0x1005,
|
||||
XFMEM_SETGPMETRIC = 0x1006,
|
||||
XFMEM_SETGPMETRIC = 0x1006, // Perf0 according to YAGCD
|
||||
XFMEM_UNKNOWN_1007 = 0x1007, // Perf1 according to YAGCD
|
||||
XFMEM_VTXSPECS = 0x1008,
|
||||
XFMEM_SETNUMCHAN = 0x1009,
|
||||
XFMEM_SETCHAN0_AMBCOLOR = 0x100a,
|
||||
@ -211,21 +212,26 @@ enum
|
||||
XFMEM_SETCHAN0_ALPHA = 0x1010,
|
||||
XFMEM_SETCHAN1_ALPHA = 0x1011,
|
||||
XFMEM_DUALTEX = 0x1012,
|
||||
XFMEM_UNKNOWN_GROUP_1_START = 0x1013,
|
||||
XFMEM_UNKNOWN_GROUP_1_END = 0x1017,
|
||||
XFMEM_SETMATRIXINDA = 0x1018,
|
||||
XFMEM_SETMATRIXINDB = 0x1019,
|
||||
XFMEM_SETVIEWPORT = 0x101a,
|
||||
XFMEM_SETZSCALE = 0x101c,
|
||||
XFMEM_SETZOFFSET = 0x101f,
|
||||
XFMEM_SETPROJECTION = 0x1020,
|
||||
// XFMEM_SETPROJECTIONB = 0x1021,
|
||||
// XFMEM_SETPROJECTIONC = 0x1022,
|
||||
// XFMEM_SETPROJECTIOND = 0x1023,
|
||||
// XFMEM_SETPROJECTIONE = 0x1024,
|
||||
// XFMEM_SETPROJECTIONF = 0x1025,
|
||||
// XFMEM_SETPROJECTIONORTHO1 = 0x1026,
|
||||
// XFMEM_SETPROJECTIONORTHO2 = 0x1027,
|
||||
// XFMEM_SETPROJECTIONB = 0x1021,
|
||||
// XFMEM_SETPROJECTIONC = 0x1022,
|
||||
// XFMEM_SETPROJECTIOND = 0x1023,
|
||||
// XFMEM_SETPROJECTIONE = 0x1024,
|
||||
// XFMEM_SETPROJECTIONF = 0x1025,
|
||||
// XFMEM_SETPROJECTIONORTHO = 0x1026,
|
||||
XFMEM_UNKNOWN_GROUP_2_START = 0x1027,
|
||||
XFMEM_UNKNOWN_GROUP_2_END = 0x103e,
|
||||
XFMEM_SETNUMTEXGENS = 0x103f,
|
||||
XFMEM_SETTEXMTXINFO = 0x1040,
|
||||
XFMEM_UNKNOWN_GROUP_3_START = 0x1048,
|
||||
XFMEM_UNKNOWN_GROUP_3_END = 0x104f,
|
||||
XFMEM_SETPOSTMTXINFO = 0x1050,
|
||||
XFMEM_REGISTERS_END = 0x1058,
|
||||
};
|
||||
|
@ -195,8 +195,7 @@ static void XFRegWritten(int transferSize, u32 baseAddress, DataReader src)
|
||||
|
||||
default:
|
||||
DolphinAnalytics::Instance().ReportGameQuirk(GameQuirk::USES_UNKNOWN_XF_COMMAND);
|
||||
if (newValue != 0) // Ignore writes of zero.
|
||||
WARN_LOG_FMT(VIDEO, "Unknown XF Reg: {:x}={:x}", address, newValue);
|
||||
WARN_LOG_FMT(VIDEO, "Unknown XF Reg: {:x}={:x}", address, newValue);
|
||||
break;
|
||||
}
|
||||
|
||||
|
Loading…
x
Reference in New Issue
Block a user