summaryrefslogtreecommitdiff
path: root/Source/Core/VideoBackends/OGL/TextureCache.cpp
diff options
context:
space:
mode:
authormagumagu <magumagu9@gmail.com>2015-01-26 15:33:23 -0800
committermagumagu <magumagu9@gmail.com>2015-02-19 15:09:27 -0800
commitc0a4760f0efbb99274c33f30154a7f43aab70494 (patch)
tree43f5702f9719d895a1637da55798145e38cfb7fe /Source/Core/VideoBackends/OGL/TextureCache.cpp
parentfbbbad98e93a0437c5124283cbf877f32eeceb86 (diff)
Decode EFB copies used as paletted textures.
A number of games make an EFB copy in I4/I8 format, then use it as a texture in C4/C8 format. Detect when this happens, and decode the copy on the GPU using the specified palette. This has a few advantages: it allows using EFB2Tex for a few more games, it, it preserves the resolution of scaled EFB copies, and it's probably a bit faster. D3D only at the moment, but porting to OpenGL should be straightforward..
Diffstat (limited to 'Source/Core/VideoBackends/OGL/TextureCache.cpp')
-rw-r--r--Source/Core/VideoBackends/OGL/TextureCache.cpp12
1 files changed, 9 insertions, 3 deletions
diff --git a/Source/Core/VideoBackends/OGL/TextureCache.cpp b/Source/Core/VideoBackends/OGL/TextureCache.cpp
index 83c4af7a98..e579909a9d 100644
--- a/Source/Core/VideoBackends/OGL/TextureCache.cpp
+++ b/Source/Core/VideoBackends/OGL/TextureCache.cpp
@@ -204,7 +204,7 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo
if (false == g_ActiveConfig.bCopyEFBToTexture)
{
int encoded_size = TextureConverter::EncodeToRamFromTexture(
- addr,
+ dstAddr,
read_texture,
srcFormat == PEControl::Z24,
isIntensity,
@@ -212,12 +212,12 @@ void TextureCache::TCacheEntry::FromRenderTarget(u32 dstAddr, unsigned int dstFo
scaleByHalf,
srcRect);
- u8* dst = Memory::GetPointer(addr);
+ u8* dst = Memory::GetPointer(dstAddr);
u64 const new_hash = GetHash64(dst,encoded_size,g_ActiveConfig.iSafeTextureCache_ColorSamples);
size_in_bytes = (u32)encoded_size;
- TextureCache::MakeRangeDynamic(addr,encoded_size);
+ TextureCache::MakeRangeDynamic(dstAddr, encoded_size);
hash = new_hash;
}
@@ -359,4 +359,10 @@ void TextureCache::DeleteShaders()
s_DepthMatrixProgram.Destroy();
}
+void TextureCache::ConvertTexture(TextureCache::TCacheEntryBase* entry, TCacheEntryBase* unconverted, void* palette, TlutFormat format)
+{
+ // TODO: Implement.
+ return;
+}
+
}