summaryrefslogtreecommitdiff
path: root/Source/Core/VideoCommon/Src/TextureCacheBase.cpp
diff options
context:
space:
mode:
authorNeoBrainX <NeoBrainX@gmail.com>2012-05-28 11:31:37 +0200
committerNeoBrainX <NeoBrainX@gmail.com>2012-06-20 18:18:05 +0200
commit8d30ac462a499d0bde615c260bf9c69146859b9a (patch)
tree543b960d7f5d968f2dd9d9733ef9b5c1f859f5b8 /Source/Core/VideoCommon/Src/TextureCacheBase.cpp
parent30de244050d57ff981981b20ce414eb7b5e9f9ab (diff)
Instead of invalidating texcache whenever the graphics configuration dialog gets opened, clean up textures on configuration changes.
Diffstat (limited to 'Source/Core/VideoCommon/Src/TextureCacheBase.cpp')
-rw-r--r--Source/Core/VideoCommon/Src/TextureCacheBase.cpp46
1 files changed, 38 insertions, 8 deletions
diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp
index bb240d5df3..cc5a0f29b4 100644
--- a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp
+++ b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp
@@ -42,7 +42,9 @@ GC_ALIGNED16(u8 *TextureCache::temp) = NULL;
unsigned int TextureCache::temp_size;
TextureCache::TexCache TextureCache::textures;
-bool TextureCache::DeferredInvalidate;
+
+TextureCache::BackupConfig TextureCache::backup_config;
+
TextureCache::TCacheEntryBase::~TCacheEntryBase()
{
@@ -59,6 +61,7 @@ TextureCache::TextureCache()
SetHash64Function(g_ActiveConfig.bHiresTextures || g_ActiveConfig.bDumpTextures);
}
+// TODO: Kill shutdown parameter...
void TextureCache::Invalidate(bool shutdown)
{
TexCache::iterator
@@ -75,13 +78,6 @@ void TextureCache::Invalidate(bool shutdown)
if(g_ActiveConfig.bHiresTextures && !g_ActiveConfig.bDumpTextures)
HiresTextures::Init(SConfig::GetInstance().m_LocalCoreStartupParameter.m_strUniqueID.c_str());
SetHash64Function(g_ActiveConfig.bHiresTextures || g_ActiveConfig.bDumpTextures);
-
- DeferredInvalidate = false;
-}
-
-void TextureCache::InvalidateDefer()
-{
- DeferredInvalidate = true;
}
TextureCache::~TextureCache()
@@ -94,6 +90,40 @@ TextureCache::~TextureCache()
}
}
+void TextureCache::OnConfigChanged(VideoConfig& config)
+{
+ if (!g_texture_cache)
+ goto skip_checks;
+
+ // TODO: Invalidating texcache is really stupid in some of these cases
+ if (config.iSafeTextureCache_ColorSamples != backup_config.s_colorsamples ||
+ config.bTexFmtOverlayEnable != backup_config.s_texfmt_overlay ||
+ config.bTexFmtOverlayCenter != backup_config.s_texfmt_overlay_center ||
+ config.bHiresTextures != backup_config.s_hires_textures)
+ g_texture_cache->Invalidate(false);
+
+ // TODO: Probably shouldn't clear all render targets here, just mark them dirty or something.
+ if (config.bEFBCopyCacheEnable != backup_config.s_copy_cache_enable || // TODO: not sure if this is needed?
+ config.bCopyEFBToTexture != backup_config.s_copy_efb_to_texture ||
+ config.bCopyEFBScaled != backup_config.s_copy_efb_scaled ||
+ config.bEFBCopyEnable != backup_config.s_copy_efb ||
+ config.iEFBScale != backup_config.s_efb_scale)
+ {
+ g_texture_cache->ClearRenderTargets();
+ }
+
+skip_checks:
+ backup_config.s_colorsamples = config.iSafeTextureCache_ColorSamples;
+ backup_config.s_copy_efb_to_texture = config.bCopyEFBToTexture;
+ backup_config.s_copy_efb_scaled = config.bCopyEFBScaled;
+ backup_config.s_copy_efb = config.bEFBCopyEnable;
+ backup_config.s_efb_scale = config.iEFBScale;
+ backup_config.s_texfmt_overlay = config.bTexFmtOverlayEnable;
+ backup_config.s_texfmt_overlay_center = config.bTexFmtOverlayCenter;
+ backup_config.s_hires_textures = config.bHiresTextures;
+ backup_config.s_copy_cache_enable = config.bEFBCopyCacheEnable;
+}
+
void TextureCache::Cleanup()
{
TexCache::iterator iter = textures.begin();