diff options
Diffstat (limited to 'src/GPU.cpp')
-rw-r--r-- | src/GPU.cpp | 40 |
1 files changed, 1 insertions, 39 deletions
diff --git a/src/GPU.cpp b/src/GPU.cpp index d5465bb..d8e3d72 100644 --- a/src/GPU.cpp +++ b/src/GPU.cpp @@ -93,8 +93,7 @@ std::unique_ptr<GPU2D> GPU2D_B = {}; we don't want to completely invalidate them every time they're unmapped and remapped For this reason we don't track the dirtyness per mapping region, but instead per VRAM bank - with VRAMDirty. Writes to LCDC go directly into VRAMDirty, while writes via other mapping regions - like BG or OBJ are first tracked in VRAMWritten_* and need to be flushed using SyncDirtyFlags. + with VRAMDirty. This is more or less a description of VRAMTrackingSet::DeriveState Each time before the memory is read two things could have happened @@ -120,13 +119,6 @@ VRAMTrackingSet<8*1024, 8*1024> VRAMDirty_BOBJExtPal; VRAMTrackingSet<512*1024, 128*1024> VRAMDirty_Texture; VRAMTrackingSet<128*1024, 16*1024> VRAMDirty_TexPal; - -NonStupidBitField<512*1024/VRAMDirtyGranularity> VRAMWritten_ABG; -NonStupidBitField<256*1024/VRAMDirtyGranularity> VRAMWritten_AOBJ; -NonStupidBitField<128*1024/VRAMDirtyGranularity> VRAMWritten_BBG; -NonStupidBitField<128*1024/VRAMDirtyGranularity> VRAMWritten_BOBJ; -NonStupidBitField<256*1024/VRAMDirtyGranularity> VRAMWritten_ARM7; - NonStupidBitField<128*1024/VRAMDirtyGranularity> VRAMDirty[9]; u8 VRAMFlat_ABG[512*1024]; @@ -1028,8 +1020,6 @@ void StartHBlank(u32 line) DispStat[0] |= (1<<1); DispStat[1] |= (1<<1); - SyncDirtyFlags(); - if (VCount < 192) { // draw @@ -1266,34 +1256,6 @@ template NonStupidBitField<128*1024/VRAMDirtyGranularity> VRAMTrackingSet<128*10 template NonStupidBitField<256*1024/VRAMDirtyGranularity> VRAMTrackingSet<256*1024, 16*1024>::DeriveState(u32*); template NonStupidBitField<512*1024/VRAMDirtyGranularity> VRAMTrackingSet<512*1024, 16*1024>::DeriveState(u32*); -template <u32 Size> -void SyncDirtyFlags(u32* mappings, NonStupidBitField<Size>& writtenFlags) -{ - const u32 VRAMWrittenBitsPer16KB = 16*1024/VRAMDirtyGranularity; - - for (typename NonStupidBitField<Size>::Iterator it = writtenFlags.Begin(); it != writtenFlags.End(); it++) - { - u32 mapping = mappings[*it / VRAMWrittenBitsPer16KB]; - while (mapping != 0) - { - u32 num = __builtin_ctz(mapping); - - VRAMDirty[num][*it & (VRAMMask[num] / VRAMDirtyGranularity)] = true; - - mapping &= ~(1 << num); - } - } - writtenFlags.Clear(); -} - -void SyncDirtyFlags() -{ - SyncDirtyFlags(VRAMMap_ABG, VRAMWritten_ABG); - SyncDirtyFlags(VRAMMap_AOBJ, VRAMWritten_AOBJ); - SyncDirtyFlags(VRAMMap_BBG, VRAMWritten_BBG); - SyncDirtyFlags(VRAMMap_BOBJ, VRAMWritten_BOBJ); -} - template <u32 MappingGranularity, u32 Size> inline bool CopyLinearVRAM(u8* flat, u32* mappings, NonStupidBitField<Size>& dirty, u64 (*slowAccess)(u32 addr)) { |