diff options
| author | Markus Wick <degasus@users.noreply.github.com> | 2015-10-16 10:02:36 +0200 |
|---|---|---|
| committer | Markus Wick <degasus@users.noreply.github.com> | 2015-10-16 10:02:36 +0200 |
| commit | d12b026ecbf421c02005e3ee4ade0b7e34056ddb (patch) | |
| tree | 8a33e161423a48cf3d7151cbb5c6475a41000839 /Source/Core/VideoCommon | |
| parent | 93299e2dd013c2b2ad4a44fa627bd4eb642a2e5f (diff) | |
| parent | af28934703c2f953d2e8281b0dbd4fe9e21954cf (diff) | |
Merge pull request #3165 from mimimi085181/partial-texture-updates-same-offset
Do not try to load strided efb copies or ones with wrong dimensions
Diffstat (limited to 'Source/Core/VideoCommon')
| -rw-r--r-- | Source/Core/VideoCommon/TextureCacheBase.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/Source/Core/VideoCommon/TextureCacheBase.cpp b/Source/Core/VideoCommon/TextureCacheBase.cpp index 1d9b564a8f..724d86b433 100644 --- a/Source/Core/VideoCommon/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/TextureCacheBase.cpp @@ -471,7 +471,9 @@ TextureCache::TCacheEntryBase* TextureCache::Load(const u32 stage) while (iter != iter_range.second) { TCacheEntryBase* entry = iter->second; - if (entry->IsEfbCopy()) + // Do not load strided EFB copies, they are not meant to be used directly + if (entry->IsEfbCopy() && entry->native_width == nativeW && entry->native_height == nativeH && + entry->memory_stride == entry->CacheLinesPerRow() * 32) { // EFB copies have slightly different rules as EFB copy formats have different // meanings from texture formats. @@ -517,8 +519,9 @@ TextureCache::TCacheEntryBase* TextureCache::Load(const u32 stage) // textures as the same texture here, when the texture itself is the same. This // improves the performance a lot in some games that use paletted textures. // Example: Sonic the Fighters (inside Sonic Gems Collection) + // Skip EFB copies here, so they can be used for partial texture updates if (entry->frameCount != FRAMECOUNT_INVALID && entry->frameCount < temp_frameCount && - !(isPaletteTexture && entry->base_hash == base_hash)) + !entry->IsEfbCopy() && !(isPaletteTexture && entry->base_hash == base_hash)) { temp_frameCount = entry->frameCount; oldest_entry = iter; |
