diff options
| author | Ryan Houdek <Sonicadvance1@gmail.com> | 2015-01-21 13:40:36 -0600 |
|---|---|---|
| committer | Ryan Houdek <Sonicadvance1@gmail.com> | 2015-01-21 13:40:36 -0600 |
| commit | 50d495b5810e3e1a5b94304ff1ef46f0b540e357 (patch) | |
| tree | d4877b3c27e34b0dbdccd12c90b90c6981025568 /Source/Core/VideoCommon/TextureCacheBase.cpp | |
| parent | b8b537d96e671985ef3dc53bc2d1f244deba7e1c (diff) | |
| parent | 0d3343d093faa31f4884c51cb2e88254dbefc51b (diff) | |
Merge pull request #1916 from mimimi085181/master
Make efb to texture less broken for paletted textures that are efb copies
Diffstat (limited to 'Source/Core/VideoCommon/TextureCacheBase.cpp')
| -rw-r--r-- | Source/Core/VideoCommon/TextureCacheBase.cpp | 9 |
1 files changed, 9 insertions, 0 deletions
diff --git a/Source/Core/VideoCommon/TextureCacheBase.cpp b/Source/Core/VideoCommon/TextureCacheBase.cpp index 8327812f01..684dc56b5e 100644 --- a/Source/Core/VideoCommon/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/TextureCacheBase.cpp @@ -356,8 +356,17 @@ TextureCache::TCacheEntryBase* TextureCache::Load(const u32 stage) // we must make sure that a paletted texture gets assigned multiple IDs for each tlut used. // // TODO: Because texID isn't always the same as the address now, CopyRenderTargetToTexture might be broken now + u32 temp_texID = texID; texID ^= ((u32)tlut_hash) ^(u32)(tlut_hash >> 32); tex_hash ^= tlut_hash; + + // Don't change the texID depending on the tlut_hash for paletted textures that are efb copies and don't have + // an entry in the cache for texID ^ tlut_hash. This makes those textures less broken when using efb to texture. + // Examples are the mini map in Twilight Princess and objects on the targetting computer in Rogue Squadron 2(RS2). + // TODO: Convert those textures using the right palette, so they display correctly + auto iter = textures.find(temp_texID); + if (iter != textures.end() && iter->second->IsEfbCopy() && textures.find(texID) == textures.end()) + texID = temp_texID; } // GPUs don't like when the specified mipmap count would require more than one 1x1-sized LOD in the mipmap chain |
