D741 - Draws larger than one wave run in chunks

Status: decided Date: 2026-10-05

A draw whose primitive shader reads the geometry engine's inputs (D730) and has more vertices or primitives than one wave's threads is split into chunks that one wave holds, as the geometry engine splits a draw into primitive-shader subgroups. This supersedes D730's rejection of splitting: two titles' draws now need it.

A list's chunk takes lanes / 3 whole triangles. A strip's takes an even count, lanes - 2 rounded down to even, so each chunk's first triangle has the strip's even winding; consecutive chunks share two vertices. Each chunk is its own module for its own geometry and an indexed draw of its vertex count. Its vertex threads read their ids as indices (D740): an indexed draw's own, from where the chunk's first primitive's begin; a non-indexed draw's as thirty-two-bit ids counting up from that position, built by the host.

A vertex shared between chunks is computed in each. Every vertex is computed from its own id, so it is the same vertex.

Rejected: