diff --git a/pcsx2/GS/GSState.cpp b/pcsx2/GS/GSState.cpp index e3617ab81e..c9e08a2333 100644 --- a/pcsx2/GS/GSState.cpp +++ b/pcsx2/GS/GSState.cpp @@ -2899,17 +2899,24 @@ bool GSState::TrianglesAreQuads(bool shuffle_check) if (idx > 0) { const u16* const prev_tri= m_index.buff + (idx - 3); - GIFRegXYZ vert = v[i[0]].XYZ; - GIFRegXYZ last_vert = v[i[2]].XYZ; + GIFRegXYZ new_verts[3] = {v[i[0]].XYZ, v[i[1]].XYZ, v[i[2]].XYZ}; if (shuffle_check) { - vert.X -= 8 << 4; - last_vert.X -= 8 << 4; + new_verts[0].X -= 8 << 4; + new_verts[1].X -= 8 << 4; + new_verts[2].X -= 8 << 4; } + u32 match_vert_count = 0; - if (vert != m_vertex.buff[prev_tri[0]].XYZ && vert != m_vertex.buff[prev_tri[1]].XYZ && vert != m_vertex.buff[prev_tri[2]].XYZ && - last_vert != m_vertex.buff[prev_tri[0]].XYZ && last_vert != m_vertex.buff[prev_tri[1]].XYZ && last_vert != m_vertex.buff[prev_tri[2]].XYZ) + if (!(new_verts[0] != m_vertex.buff[prev_tri[0]].XYZ && new_verts[0] != m_vertex.buff[prev_tri[1]].XYZ && new_verts[0] != m_vertex.buff[prev_tri[2]].XYZ)) + match_vert_count++; + if (!(new_verts[1] != m_vertex.buff[prev_tri[0]].XYZ && new_verts[1] != m_vertex.buff[prev_tri[1]].XYZ && new_verts[1] != m_vertex.buff[prev_tri[2]].XYZ)) + match_vert_count++; + if (!(new_verts[2] != m_vertex.buff[prev_tri[0]].XYZ && new_verts[2] != m_vertex.buff[prev_tri[1]].XYZ && new_verts[2] != m_vertex.buff[prev_tri[2]].XYZ)) + match_vert_count++; + + if (match_vert_count != 2) return false; } // Degenerate triangles should've been culled already, so we can check indices.