From 88bd038f7d95b3ef8bbbca9813fdbda6e2e486b6 Mon Sep 17 00:00:00 2001 From: refractionpcsx2 Date: Thu, 2 Feb 2023 10:36:44 +0000 Subject: [PATCH] GS-CLUT: Handle invalidation on wrapping writes --- pcsx2/GS/GSClut.cpp | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/pcsx2/GS/GSClut.cpp b/pcsx2/GS/GSClut.cpp index d37b5865df6d8..d48ffe9a71c7b 100644 --- a/pcsx2/GS/GSClut.cpp +++ b/pcsx2/GS/GSClut.cpp @@ -149,6 +149,15 @@ bool GSClut::InvalidateRange(u32 start_block, u32 end_block, bool is_draw) GIFRegTEX0 next_cbp; next_cbp.U64 = m_write.next_tex0; + // Handle wrapping writes. Star Wars Battlefront 2 does this. + if ((end_block & 0xFFE0) < (start_block & 0xFFE0)) + { + if ((next_cbp.CBP + 3U) <= end_block) + next_cbp.CBP += 0x4000; + + end_block += 0x4000; + } + if ((next_cbp.CBP + 3U) >= start_block && end_block >= next_cbp.CBP) { m_write.dirty |= is_draw ? 2 : 1;