From aea75f51bdd3e00190688131162713ea3dd2be3f Mon Sep 17 00:00:00 2001 From: Gregory Hainaut Date: Fri, 22 Jul 2016 20:38:46 +0200 Subject: [PATCH] gsdx tc: partial support of pseudo depth for Dx Fix #1457 (GTA) The game uses a depth format for a pure color buffer (cokes do ravage in gaming industry) However I'm really afraid that it migth break another effect in other games. --- plugins/GSdx/GSTextureCache.cpp | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/plugins/GSdx/GSTextureCache.cpp b/plugins/GSdx/GSTextureCache.cpp index d95983aaed..c783590695 100644 --- a/plugins/GSdx/GSTextureCache.cpp +++ b/plugins/GSdx/GSTextureCache.cpp @@ -87,11 +87,6 @@ void GSTextureCache::RemoveAll() GSTextureCache::Source* GSTextureCache::LookupDepthSource(const GIFRegTEX0& TEX0, const GIFRegTEXA& TEXA, const GSVector4i& r, bool palette) { - if (!CanConvertDepth()) { - GL_CACHE("LookupDepthSource not supported (0x%x, F:0x%x)", TEX0.TBP0, TEX0.PSM); - throw GSDXRecoverableError(); - } - const GSLocalMemory::psm_t& psm_s = GSLocalMemory::m_psm[TEX0.PSM]; Source* src = NULL; @@ -110,6 +105,17 @@ GSTextureCache::Source* GSTextureCache::LookupDepthSource(const GIFRegTEX0& TEX0 } } + if (!CanConvertDepth()) { + if (dst) { + GL_CACHE("LookupDepthSource not supported (0x%x, F:0x%x)", TEX0.TBP0, TEX0.PSM); + throw GSDXRecoverableError(); + } else { + // LookupSource call LookupDepthSource, I'm sure it is nice testcase for formal tools ;) + GL_CACHE("LookupDepthSource not supported let's try standard LookupSource"); + return LookupSource(TEX0, TEXA, r); + } + } + if (!dst) { // Retry on the render target (Silent Hill 4) for(auto t : m_dst[RenderTarget]) { @@ -617,9 +623,6 @@ GSTextureCache::Target* GSTextureCache::LookupTarget(const GIFRegTEX0& TEX0, int // must invalidate the Target/Depth respectively void GSTextureCache::InvalidateVideoMemType(int type, uint32 bp) { - if (!CanConvertDepth()) - return; - for(list::iterator i = m_dst[type].begin(); i != m_dst[type].end(); i++) { Target* t = *i;