From 03bf1ec7b30795e7e7d92e036e348bc4bebba990 Mon Sep 17 00:00:00 2001 From: Gregory Hainaut Date: Sun, 25 Oct 2015 15:24:16 +0100 Subject: [PATCH] gsdx-tc: extend preload frame hack to load target too The goal is to check the impact on game that have wrong RT content. It helps a bit Smash Court Tennis Pro Tournament 2 but the game suffers another texture cache bug. (RT BW is 10 whereas texture BW is 8) Note: Armored Core: Last Raven must be tested (only game so far that rely on the option and I didn't want to add a new one). --- plugins/GSdx/GSTextureCache.cpp | 32 +++++++++++++++++++------------- 1 file changed, 19 insertions(+), 13 deletions(-) diff --git a/plugins/GSdx/GSTextureCache.cpp b/plugins/GSdx/GSTextureCache.cpp index 922a9cb5db..1403a95fe5 100644 --- a/plugins/GSdx/GSTextureCache.cpp +++ b/plugins/GSdx/GSTextureCache.cpp @@ -323,26 +323,32 @@ GSTextureCache::Target* GSTextureCache::LookupTarget(const GIFRegTEX0& TEX0, int if(dst == NULL) return NULL; + // In theory new textures contain invalidated data. Still in theory a new target + // must contains the content of the GS memory. + // In practice, TC will wrongly invalidate some RT. For example due to write on the alpha + // channel but colors is still valid. Unfortunately TC doesn't support the upload of data + // in target. + // + // Cleaning the code here will likely break several games. However it might reduce + // the noise in draw call debugging. It is the main reason to enable it on debug build. + // + // From a performance point of view, it might cost a little on big upscaling + // but normally few RT are miss so it must remain reasonable. + if (s_IS_OPENGL) { + if (m_preload_frame) { + GL_INS("Preloading the RT DATA"); + dst->m_dirty.push_back(GSDirtyRect(GSVector4i(0, 0, TEX0.TBW * 64, h), TEX0.PSM)); + dst->Update(); + } else { #ifdef ENABLE_OGL_DEBUG - // In theory new textures contain invalidated data. Still in theory a new target - // must contains the content of the GS memory. - // In practice, TC will wrongly invalidate some RT. For example due to write on the alpha - // channel but colors is still valid. Unfortunately TC doesn't support the upload of data - // in target. - // - // Cleaning the code here will likely break several games. However it might reduce - // the noise in draw call debugging. It is the main reason to enable it on debug build. - // - // From a performance point of view, it might cost a little on big upscaling - // but normally few RT are miss so it must remain reasonable. - if (s_IS_OPENGL) { switch (type) { case RenderTarget: m_renderer->m_dev->ClearRenderTarget(dst->m_texture, 0); break; case DepthStencil: m_renderer->m_dev->ClearDepth(dst->m_texture, 0); break; default:break; } - } #endif + } + } } if(m_renderer->CanUpscale())