From 4573c22fa87336c371f81be08f9873b2e69fda49 Mon Sep 17 00:00:00 2001 From: Jeffrey Pfau Date: Sun, 23 Oct 2016 11:09:15 -0700 Subject: [PATCH] Core: Fix tile cache invalidation --- src/core/tile-cache.c | 3 +++ src/core/tile-cache.h | 2 ++ 2 files changed, 5 insertions(+) diff --git a/src/core/tile-cache.c b/src/core/tile-cache.c index 53673dd0b..17572fe0b 100644 --- a/src/core/tile-cache.c +++ b/src/core/tile-cache.c @@ -90,6 +90,7 @@ void mTileCacheWriteVRAM(struct mTileCache* cache, uint32_t address) { size_t i; for (i = 0; i < count; ++i) { cache->status[(address >> bpp) * count + i].vramClean = 0; + ++cache->status[(address >> bpp) * count + i].vramVersion; } } @@ -221,6 +222,7 @@ const uint16_t* mTileCacheGetTile(struct mTileCache* cache, unsigned tileId, uns struct mTileCacheEntry* status = &cache->status[tileId * count + paletteId]; struct mTileCacheEntry desiredStatus = { .paletteVersion = cache->globalPaletteVersion[cPaletteId][paletteId], + .vramVersion = status->vramVersion, .vramClean = 1, .paletteId = paletteId, .activePalette = cPaletteId @@ -252,6 +254,7 @@ const uint16_t* mTileCacheGetTileIfDirty(struct mTileCache* cache, struct mTileC struct mTileCacheEntry* status = &cache->status[tileId * count + paletteId]; struct mTileCacheEntry desiredStatus = { .paletteVersion = cache->globalPaletteVersion[cPaletteId][paletteId], + .vramVersion = status->vramVersion, .vramClean = 1, .paletteId = paletteId, .activePalette = cPaletteId diff --git a/src/core/tile-cache.h b/src/core/tile-cache.h index 5d83e4b0b..052dca884 100644 --- a/src/core/tile-cache.h +++ b/src/core/tile-cache.h @@ -20,9 +20,11 @@ DECL_BITS(mTileCacheSystemInfo, MaxTiles, 16, 13); struct mTileCacheEntry { uint32_t paletteVersion; + uint32_t vramVersion; uint8_t vramClean; uint8_t paletteId; uint8_t activePalette; + uint8_t padding; }; struct mTileCache {