diff --git a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp index fb595bdd8a..ebf01b1ce8 100644 --- a/pcsx2/GS/Renderers/HW/GSRendererHW.cpp +++ b/pcsx2/GS/Renderers/HW/GSRendererHW.cpp @@ -8037,6 +8037,14 @@ __ri void GSRendererHW::DrawPrims(GSTextureCache::Target* rt, GSTextureCache::Ta m_conf.drawarea = m_channel_shuffle ? scissor : scissor.rintersect(ComputeBoundingBox(rtsize, rtscale)); m_conf.scissor = (DATE && !DATE_BARRIER) ? m_conf.drawarea : scissor; + // ComputeDrawlistGetSize expects the original index layout, so needs to be called before we modify it via HandleProvokingVertexFirst/SetupIA. + if (m_conf.require_full_barrier && (g_gs_device->Features().texture_barrier || g_gs_device->Features().multidraw_fb_copy)) + { + ComputeDrawlistGetSize(rt->m_scale); + m_conf.drawlist = &m_drawlist; + m_conf.drawlist_bbox = &m_drawlist_bbox; + } + HandleProvokingVertexFirst(); SetupIA(rtscale, sx, sy, m_channel_shuffle_width != 0); @@ -8125,13 +8133,6 @@ __ri void GSRendererHW::DrawPrims(GSTextureCache::Target* rt, GSTextureCache::Ta m_conf.alpha_second_pass.enable = false; } - if (m_conf.require_full_barrier && (g_gs_device->Features().texture_barrier || g_gs_device->Features().multidraw_fb_copy)) - { - ComputeDrawlistGetSize(rt->m_scale); - m_conf.drawlist = &m_drawlist; - m_conf.drawlist_bbox = &m_drawlist_bbox; - } - if (!m_channel_shuffle_width) g_gs_device->RenderHW(m_conf); else