From b6de3cc63855cf8dc2f89867c2efbc759bb7e211 Mon Sep 17 00:00:00 2001
From: RSDuck <rsduck@users.noreply.github.com>
Date: Wed, 9 Dec 2020 20:10:44 +0100
Subject: VRAM dirty tracking fix reset/savestate load

---
 src/GPU.cpp | 4 ++++
 src/GPU.h   | 7 ++++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git a/src/GPU.cpp b/src/GPU.cpp
index a3b7934..35ebaba 100644
--- a/src/GPU.cpp
+++ b/src/GPU.cpp
@@ -182,6 +182,8 @@ void ResetVRAMCache()
     VRAMDirty_BBGExtPal.Reset();
     VRAMDirty_AOBJExtPal.Reset();
     VRAMDirty_BOBJExtPal.Reset();
+    VRAMDirty_Texture.Reset();
+    VRAMDirty_TexPal.Reset();
 
     memset(VRAMFlat_ABG, 0, sizeof(VRAMFlat_ABG));
     memset(VRAMFlat_BBG, 0, sizeof(VRAMFlat_BBG));
@@ -191,6 +193,8 @@ void ResetVRAMCache()
     memset(VRAMFlat_BBGExtPal, 0, sizeof(VRAMFlat_BBGExtPal));
     memset(VRAMFlat_AOBJExtPal, 0, sizeof(VRAMFlat_AOBJExtPal));
     memset(VRAMFlat_BOBJExtPal, 0, sizeof(VRAMFlat_BOBJExtPal));
+    memset(VRAMFlat_Texture, 0, sizeof(VRAMFlat_Texture));
+    memset(VRAMFlat_TexPal, 0, sizeof(VRAMFlat_TexPal));
 }
 
 void Reset()
diff --git a/src/GPU.h b/src/GPU.h
index 2f71da6..cc62e1e 100644
--- a/src/GPU.h
+++ b/src/GPU.h
@@ -93,7 +93,12 @@ struct VRAMTrackingSet
 
     void Reset()
     {
-        memset(Mapping, 0, sizeof(Mapping));
+        for (int i = 0; i < Size / MappingGranularity; i++)
+        {
+            // this is not a real VRAM bank
+            // so it will always be a mismatch => the bank will be completely invalidated
+            Mapping[i] = 0x8000;
+        }
     }
     NonStupidBitField<Size/VRAMDirtyGranularity> DeriveState(u32* currentMappings);
 };
-- 
cgit v1.2.3