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