From 6e6d8af6ddaddeeaf89be2f8b6920b913488f0c6 Mon Sep 17 00:00:00 2001 From: Jordan Woyak Date: Wed, 20 Feb 2013 05:37:01 -0600 Subject: Revert "Don't load level 0 twice for 1-level textures in DX11." and fix it properly. All backend TextureCaches now load level 0 in CreateTexture. This reverts commit 294cb165ba3449cc4fd96eabb5272e2984a58eb8. --- Source/Core/VideoCommon/Src/TextureCacheBase.cpp | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) (limited to 'Source/Core/VideoCommon/Src/TextureCacheBase.cpp') diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp index fd935de342..fda4f21a7e 100644 --- a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp @@ -481,15 +481,20 @@ TextureCache::TCacheEntryBase* TextureCache::Load(unsigned int const stage, GFX_DEBUGGER_PAUSE_AT(NEXT_NEW_TEXTURE, true); } + else + { + // load texture (CreateTexture also loads level 0) + entry->Load(width, height, expandedWidth, 0); + } entry->SetGeneralParameters(address, texture_size, full_format, entry->num_mipmaps); entry->SetDimensions(nativeW, nativeH, width, height); entry->hash = tex_hash; - if (entry->IsEfbCopy() && !g_ActiveConfig.bCopyEFBToTexture) entry->type = TCET_EC_DYNAMIC; - else entry->type = TCET_NORMAL; - - // load texture - entry->Load(width, height, expandedWidth, 0); + + if (entry->IsEfbCopy() && !g_ActiveConfig.bCopyEFBToTexture) + entry->type = TCET_EC_DYNAMIC; + else + entry->type = TCET_NORMAL; if (g_ActiveConfig.bDumpTextures && !using_custom_texture) DumpTexture(entry, 0); -- cgit v1.2.3 From 1141af64f64b801fc1509bb9c1eff92436f340e6 Mon Sep 17 00:00:00 2001 From: NeoBrainX Date: Mon, 25 Feb 2013 12:36:50 +0000 Subject: TextureCacheBase: Do not assume EFB copies can safely be deleted when we think they're "unused". Fixes issue 6040. --- Source/Core/VideoCommon/Src/TextureCacheBase.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) (limited to 'Source/Core/VideoCommon/Src/TextureCacheBase.cpp') diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp index fda4f21a7e..46aaf79bd4 100644 --- a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp @@ -129,8 +129,13 @@ void TextureCache::Cleanup() TexCache::iterator tcend = textures.end(); while (iter != tcend) { - if (frameCount > TEXTURE_KILL_THRESHOLD + iter->second->frameCount) // TODO: Deleting EFB copies might not be a good idea here... + if (frameCount > TEXTURE_KILL_THRESHOLD + iter->second->frameCount) { + // EFB copies living on the host GPU are unrecoverable and thus shouldn't be deleted + // TODO: encoding the texture back to RAM here might be a good idea + if (g_ActiveConfig.bCopyEFBToTexture && entry->IsEfbCopy()) + continue; + delete iter->second; textures.erase(iter++); } -- cgit v1.2.3 From 73a0bdd379672c4f218b92788002dbc39815fb85 Mon Sep 17 00:00:00 2001 From: NeoBrainX Date: Mon, 25 Feb 2013 12:42:52 +0000 Subject: Build fixing. --- Source/Core/VideoCommon/Src/TextureCacheBase.cpp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'Source/Core/VideoCommon/Src/TextureCacheBase.cpp') diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp index 46aaf79bd4..d261d9d6d2 100644 --- a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp @@ -133,7 +133,7 @@ void TextureCache::Cleanup() { // EFB copies living on the host GPU are unrecoverable and thus shouldn't be deleted // TODO: encoding the texture back to RAM here might be a good idea - if (g_ActiveConfig.bCopyEFBToTexture && entry->IsEfbCopy()) + if (g_ActiveConfig.bCopyEFBToTexture && iter->second->IsEfbCopy()) continue; delete iter->second; -- cgit v1.2.3 From d173d646de18bc9e158651989045fef8ddd1523f Mon Sep 17 00:00:00 2001 From: degasus Date: Mon, 25 Feb 2013 16:11:24 +0100 Subject: fix last commit by neobrain --- Source/Core/VideoCommon/Src/TextureCacheBase.cpp | 9 ++++----- 1 file changed, 4 insertions(+), 5 deletions(-) (limited to 'Source/Core/VideoCommon/Src/TextureCacheBase.cpp') diff --git a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp index d261d9d6d2..6871c411fa 100644 --- a/Source/Core/VideoCommon/Src/TextureCacheBase.cpp +++ b/Source/Core/VideoCommon/Src/TextureCacheBase.cpp @@ -129,13 +129,12 @@ void TextureCache::Cleanup() TexCache::iterator tcend = textures.end(); while (iter != tcend) { - if (frameCount > TEXTURE_KILL_THRESHOLD + iter->second->frameCount) - { + if ( frameCount > TEXTURE_KILL_THRESHOLD + iter->second->frameCount + // EFB copies living on the host GPU are unrecoverable and thus shouldn't be deleted // TODO: encoding the texture back to RAM here might be a good idea - if (g_ActiveConfig.bCopyEFBToTexture && iter->second->IsEfbCopy()) - continue; - + && ! (g_ActiveConfig.bCopyEFBToTexture && iter->second->IsEfbCopy()) ) + { delete iter->second; textures.erase(iter++); } -- cgit v1.2.3