D797 - A quad strip is seeded as the triangle strip over its quads

Status: decided Date: 2026-10-11

A draw whose input primitive is DI_PT_QUADSTRIP (20, gfx10.json:811) seeds its primitive shader as the triangle strip over the same vertices, cut to its whole quads: an even count of vertices n is n - 2 triangles, and an odd last vertex, which closes no quad, makes none. The provoking convention is the triangle strip's, from PA_SU_SC_MODE_CNTL.

A quad strip covers the quads (2i, 2i+1, 2i+3, 2i+2), and the triangle strip over the same vertices covers each of them with two triangles of the same winding, so the two cover the same pixels. radeonsi hands a GL quad strip to the hardware as this primitive (si_state_draw.cpp:630), and the primitive shader ACO compiles for it takes triangles.

Assumed (known_by = assumed): that the geometry engine splits each quad along the diagonal the triangle strip does, and provokes from the strip's vertex. Either differing changes only flat-shaded colour and how attributes interpolate across a quad, not which pixels it covers.

Why: mesa-demos draws with GL_QUAD_STRIP, and its vertex shader was refused at the first draw.

Rejected: