From f4d63877e4573f19b3554cbef83f4d37cc602fd3 Mon Sep 17 00:00:00 2001 From: refractionpcsx2 Date: Mon, 28 Aug 2023 03:22:03 +0100 Subject: [PATCH] GS/HW: Fix up and restore some old valid channel behaviour --- pcsx2/GS/Renderers/HW/GSRendererHW.cpp | 4 ++-- pcsx2/GS/Renderers/HW/GSTextureCache.cpp | 7 +------ 2 files changed, 3 insertions(+), 8 deletions(-) diff --git a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp index 45b5fac59b..8f6473b113 100644 --- a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp +++ b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp @@ -2184,8 +2184,8 @@ void GSRendererHW::Draw() tgt = nullptr; } const bool possible_shuffle = ((rt_32bit && GSLocalMemory::m_psm[m_cached_ctx.FRAME.PSM].bpp == 16) || m_cached_ctx.FRAME.Block() == m_cached_ctx.TEX0.TBP0) || IsPossibleChannelShuffle(); - const bool req_color = m_context->ALPHA.IsUsingCs(); - const bool req_alpha = m_context->TEX0.TCC && (m_cached_ctx.FRAME.FBMSK & (fm_mask & 0xFF000000)) != (fm_mask & 0xFF000000); + const bool req_color = (!PRIM->ABE || (PRIM->ABE && m_context->ALPHA.IsUsingCs())) && (possible_shuffle || (m_cached_ctx.FRAME.FBMSK & (fm_mask & 0x00FFFFFF)) != (fm_mask & 0x00FFFFFF)); + const bool req_alpha = m_context->TEX0.TCC && ((m_cached_ctx.TEST.ATE && m_cached_ctx.TEST.ATST > ATST_ALWAYS) || (possible_shuffle || (m_cached_ctx.FRAME.FBMSK & (fm_mask & 0xFF000000)) != (fm_mask & 0xFF000000))); src = tex_psm.depth ? g_texture_cache->LookupDepthSource(TEX0, env.TEXA, MIP_CLAMP, tmm.coverage, possible_shuffle, m_vt.IsLinear(), m_cached_ctx.FRAME.Block(), req_color, req_alpha) : g_texture_cache->LookupSource(TEX0, env.TEXA, MIP_CLAMP, tmm.coverage, (GSConfig.HWMipmap >= HWMipmapLevel::Basic || GSConfig.TriFilter == TriFiltering::Forced) ? &hash_lod_range : nullptr, diff --git a/pcsx2/GS/Renderers/HW/GSTextureCache.cpp b/pcsx2/GS/Renderers/HW/GSTextureCache.cpp index 0c26e96e6b..d09bf177f3 100644 --- a/pcsx2/GS/Renderers/HW/GSTextureCache.cpp +++ b/pcsx2/GS/Renderers/HW/GSTextureCache.cpp @@ -5476,13 +5476,8 @@ bool GSTextureCache::Target::HasValidBitsForFormat(u32 psm, bool req_color, bool color_valid = m_valid_rgb; break; } - - if (req_color && color_valid && !alpha_valid && (m_dirty.GetDirtyChannels() & GSUtil::GetChannelMask(psm)) & 0x7) - { - alpha_valid = true; - } - return ((alpha_valid && req_alpha) || !req_alpha) && ((color_valid && req_color) || !req_color); + return (color_valid && req_color) || (!req_color && ((alpha_valid && req_alpha) || !req_alpha)); } void GSTextureCache::Target::ResizeDrawn(const GSVector4i& rect)