diff --git a/pcsx2/GS/Renderers/HW/GSRendererNew.cpp b/pcsx2/GS/Renderers/HW/GSRendererNew.cpp index 88dbc3ab56..6214b8cfb5 100644 --- a/pcsx2/GS/Renderers/HW/GSRendererNew.cpp +++ b/pcsx2/GS/Renderers/HW/GSRendererNew.cpp @@ -598,21 +598,19 @@ void GSRendererNew::EmulateBlending(bool& DATE_PRIMID, bool& DATE_BARRIER) // BLEND_C_CLR1 with Ad, BLEND_C_CLR4 Cs > 0.5f will require sw blend. // BLEND_C_CLR1 with As/F, BLEND_C_CLR2_AF, BLEND_C_CLR3_AS can be done in hw. const bool clr_blend = !!(blend_flag & (BLEND_C_CLR1 | BLEND_C_CLR2_AF | BLEND_C_CLR3_AS | BLEND_C_CLR4)); - // Exclude triangles, breaks mgs3 on ultra blending. - const bool no_overlap_no_triangles = (m_prim_overlap == PRIM_OVERLAP_NO) && (m_vt.m_primclass != GS_TRIANGLE_CLASS); // FBMASK already reads the fb so it is safe to enable sw blend when there is no overlap. - const bool fbmask_no_overlap = m_conf.require_one_barrier && no_overlap_no_triangles; + const bool fbmask_no_overlap = m_conf.require_one_barrier && (m_prim_overlap == PRIM_OVERLAP_NO); switch (GSConfig.AccurateBlendingUnit) { case AccBlendLevel::Ultra: - sw_blending |= no_overlap_no_triangles; + sw_blending |= (m_prim_overlap == PRIM_OVERLAP_NO); [[fallthrough]]; case AccBlendLevel::Full: - sw_blending |= ((ALPHA.C == 1 || (blend_mix && (alpha_c2_high_one || alpha_c0_high_max_one))) && no_overlap_no_triangles); + sw_blending |= ((ALPHA.C == 1 || (blend_mix && (alpha_c2_high_one || alpha_c0_high_max_one))) && (m_prim_overlap == PRIM_OVERLAP_NO)); [[fallthrough]]; case AccBlendLevel::High: - sw_blending |= (!(clr_blend || blend_mix) && no_overlap_no_triangles); + sw_blending |= (!(clr_blend || blend_mix) && (m_prim_overlap == PRIM_OVERLAP_NO)); [[fallthrough]]; case AccBlendLevel::Medium: case AccBlendLevel::Basic: