diff --git a/pcsx2/GS/GSState.cpp b/pcsx2/GS/GSState.cpp index e0c5ba64f4..d1421479e5 100644 --- a/pcsx2/GS/GSState.cpp +++ b/pcsx2/GS/GSState.cpp @@ -1512,7 +1512,6 @@ void GSState::FlushWrite() r.top = m_env.TRXPOS.DSAY; r.right = r.left + m_env.TRXREG.RRW; r.bottom = r.top + m_env.TRXREG.RRH; - ExpandTarget(m_env.BITBLTBUF, r); InvalidateVideoMem(m_env.BITBLTBUF, r, true); const GSLocalMemory::writeImage wi = GSLocalMemory::m_psm[m_env.BITBLTBUF.DPSM].wi; @@ -1789,7 +1788,6 @@ void GSState::Write(const u8* mem, int len) if (m_tr.end == 0 && len >= m_tr.total) { // received all data in one piece, no need to buffer it - ExpandTarget(m_env.BITBLTBUF, r); InvalidateVideoMem(blit, r, true); psm.wi(m_mem, m_tr.x, m_tr.y, mem, m_tr.total, blit, m_env.TRXPOS, m_env.TRXREG); diff --git a/pcsx2/GS/GSState.h b/pcsx2/GS/GSState.h index 5ae2756da4..4141db857e 100644 --- a/pcsx2/GS/GSState.h +++ b/pcsx2/GS/GSState.h @@ -891,7 +891,6 @@ public: virtual void ReadbackTextureCache(); virtual void InvalidateVideoMem(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r, bool eewrite = false) {} virtual void InvalidateLocalMem(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r, bool clut = false) {} - virtual void ExpandTarget(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r) {} virtual void Move(); diff --git a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp index db4923d0b6..b6a6b73597 100644 --- a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp +++ b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp @@ -923,11 +923,6 @@ GSVector4i GSRendererHW::GetSplitTextureShuffleDrawRect() const return r.insert64<0>(0).ralign(frame_psm.pgs); } -void GSRendererHW::ExpandTarget(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r) -{ - m_tc->ExpandTarget(BITBLTBUF, r); -} - void GSRendererHW::InvalidateVideoMem(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r, bool eewrite) { // printf("[%d] InvalidateVideoMem %d,%d - %d,%d %05x (%d)\n", static_cast(g_perfmon.GetFrame()), r.left, r.top, r.right, r.bottom, static_cast(BITBLTBUF.DBP), static_cast(BITBLTBUF.DPSM)); diff --git a/pcsx2/GS/Renderers/HW/GSRendererHW.h b/pcsx2/GS/Renderers/HW/GSRendererHW.h index ba7d466c3b..69fa9f75ab 100644 --- a/pcsx2/GS/Renderers/HW/GSRendererHW.h +++ b/pcsx2/GS/Renderers/HW/GSRendererHW.h @@ -167,7 +167,6 @@ public: GSTexture* GetOutput(int i, float& scale, int& y_offset) override; GSTexture* GetFeedbackOutput(float& scale) override; - void ExpandTarget(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r) override; void InvalidateVideoMem(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r, bool eewrite = false) override; void InvalidateLocalMem(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r, bool clut = false) override; void Move() override; diff --git a/pcsx2/GS/Renderers/HW/GSTextureCache.cpp b/pcsx2/GS/Renderers/HW/GSTextureCache.cpp index d7255ad861..fe57564069 100644 --- a/pcsx2/GS/Renderers/HW/GSTextureCache.cpp +++ b/pcsx2/GS/Renderers/HW/GSTextureCache.cpp @@ -1554,62 +1554,6 @@ bool GSTextureCache::PrepareDownloadTexture(u32 width, u32 height, GSTexture::Fo return true; } -// Expands targets where the write from the EE overlaps the edge of a render target and uses the same base pointer. -void GSTextureCache::ExpandTarget(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r) -{ - GIFRegTEX0 TEX0; - TEX0.TBP0 = BITBLTBUF.DBP; - TEX0.TBW = BITBLTBUF.DBW; - TEX0.PSM = BITBLTBUF.DPSM; - Target* dst = nullptr; - auto& list = m_dst[RenderTarget]; - RGBAMask rgba; - rgba._u32 = GSUtil::GetChannelMask(TEX0.PSM); - - for (auto i = list.begin(); i != list.end(); ++i) - { - Target* t = *i; - - if (TEX0.TBP0 == t->m_TEX0.TBP0 && GSLocalMemory::m_psm[TEX0.PSM].bpp == GSLocalMemory::m_psm[t->m_TEX0.PSM].bpp && t->Overlaps(TEX0.TBP0, TEX0.TBW, TEX0.PSM, r)) - { - list.MoveFront(i.Index()); - - dst = t; - break; - } - } - - if (!dst) - return; - - // Only expand the target when the FBW matches. Otherwise, games like GT4 will end up with the main render target - // being 2000+ due to unrelated EE writes. - if (TEX0.TBW == dst->m_TEX0.TBW) - { - // Round up to the nearest even height, like the draw target allocator. - const s32 aligned_height = Common::AlignUpPow2(r.w, 2); - if (r.z > dst->m_unscaled_size.x || aligned_height > dst->m_unscaled_size.y) - { - // We don't recycle here, because most of the time when this happens it's strange-sized textures - // which are being expanded one-line-at-a-time. - if (dst->ResizeTexture(std::max(r.z, dst->m_unscaled_size.x), - std::max(aligned_height, dst->m_unscaled_size.y), false)) - { - AddDirtyRectTarget(dst, r, TEX0.PSM, TEX0.TBW, rgba); - GetTargetHeight(TEX0.TBP0, TEX0.TBW, TEX0.PSM, aligned_height); - dst->UpdateValidity(r); - dst->UpdateValidBits(GSLocalMemory::m_psm[TEX0.PSM].fmsk); - } - } - } - else - { - const GSVector4i clamped_r(r.rintersect(dst->GetUnscaledRect())); - AddDirtyRectTarget(dst, clamped_r, TEX0.PSM, TEX0.TBW, rgba); - dst->UpdateValidity(clamped_r); - dst->UpdateValidBits(GSLocalMemory::m_psm[TEX0.PSM].fmsk); - } -} // Goal: Depth And Target at the same address is not possible. On GS it is // the same memory but not on the Dx/GL. Therefore a write to the Depth/Target // must invalidate the Target/Depth respectively diff --git a/pcsx2/GS/Renderers/HW/GSTextureCache.h b/pcsx2/GS/Renderers/HW/GSTextureCache.h index 7401f314ca..0dcb93b844 100644 --- a/pcsx2/GS/Renderers/HW/GSTextureCache.h +++ b/pcsx2/GS/Renderers/HW/GSTextureCache.h @@ -444,7 +444,6 @@ public: u32 GetTargetHeight(u32 fbp, u32 fbw, u32 psm, u32 min_height); bool Has32BitTarget(u32 bp); - void ExpandTarget(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r); void InvalidateVideoMemType(int type, u32 bp); void InvalidateVideoMemSubTarget(GSTextureCache::Target* rt); void InvalidateVideoMem(const GSOffset& off, const GSVector4i& r, bool eewrite = false, bool target = true); diff --git a/pcsx2/GS/Renderers/SW/GSRendererSW.cpp b/pcsx2/GS/Renderers/SW/GSRendererSW.cpp index 2b730c176d..36c780ed83 100644 --- a/pcsx2/GS/Renderers/SW/GSRendererSW.cpp +++ b/pcsx2/GS/Renderers/SW/GSRendererSW.cpp @@ -617,8 +617,6 @@ void GSRendererSW::Sync(int reason) g_perfmon.Put(GSPerfMon::Fillrate, pixels); } -void GSRendererSW::ExpandTarget(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r) {} - void GSRendererSW::InvalidateVideoMem(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r, bool eewrite) { if (LOG) diff --git a/pcsx2/GS/Renderers/SW/GSRendererSW.h b/pcsx2/GS/Renderers/SW/GSRendererSW.h index 509a06c0e8..9295a0f044 100644 --- a/pcsx2/GS/Renderers/SW/GSRendererSW.h +++ b/pcsx2/GS/Renderers/SW/GSRendererSW.h @@ -78,7 +78,6 @@ protected: void Draw() override; void Queue(GSRingHeap::SharedPtr& item); void Sync(int reason); - void ExpandTarget(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r) override; void InvalidateVideoMem(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r, bool eewrite = false) override; void InvalidateLocalMem(const GIFRegBITBLTBUF& BITBLTBUF, const GSVector4i& r, bool clut = false) override;