From 2b646c215348d7d56d49f7426d2930c7d1a56f2c Mon Sep 17 00:00:00 2001 From: lightningterror <18107717+lightningterror@users.noreply.github.com> Date: Sat, 19 Feb 2022 22:16:35 +0100 Subject: [PATCH] GS-hw: Disable dithering if blend mix is enabled. It breaks stuff since we do a mix of hw/sw. --- pcsx2/GS/Renderers/HW/GSRendererNew.cpp | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/pcsx2/GS/Renderers/HW/GSRendererNew.cpp b/pcsx2/GS/Renderers/HW/GSRendererNew.cpp index 80fa3d9546..1930fb1755 100644 --- a/pcsx2/GS/Renderers/HW/GSRendererNew.cpp +++ b/pcsx2/GS/Renderers/HW/GSRendererNew.cpp @@ -632,6 +632,8 @@ void GSRendererNew::EmulateBlending(bool& DATE_PRIMID, bool& DATE_BARRIER) // Do not run BLEND MIX if sw blending is already present, it's less accurate blend_mix &= !sw_blending; sw_blending |= blend_mix; + // Disable dithering on blend mix. + m_conf.ps.dither &= !blend_mix; [[fallthrough]]; case AccBlendLevel::Minimum: break; @@ -675,6 +677,8 @@ void GSRendererNew::EmulateBlending(bool& DATE_PRIMID, bool& DATE_BARRIER) // Do not run BLEND MIX if sw blending is already present, it's less accurate blend_mix &= !sw_blending; sw_blending |= blend_mix; + // Disable dithering on blend mix. + m_conf.ps.dither &= !blend_mix; [[fallthrough]]; case AccBlendLevel::Minimum: break; @@ -1378,6 +1382,9 @@ void GSRendererNew::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour ASSERT(!(DATE_PRIMID && DATE_BARRIER)); } + // Before emulateblending, dither will be used + m_conf.ps.dither = GSConfig.Dithering > 0 && m_conf.ps.dfmt == 2 && m_env.DTHE.DTHE; + // Blend if (!IsOpaque() && rt) @@ -1469,7 +1476,6 @@ void GSRendererNew::DrawPrims(GSTexture* rt, GSTexture* ds, GSTextureCache::Sour } m_conf.ps.fba = m_context->FBA.FBA; - m_conf.ps.dither = GSConfig.Dithering > 0 && m_conf.ps.dfmt == 2 && m_env.DTHE.DTHE; if (m_conf.ps.dither) {