D730 - A primitive shader's geometry-engine inputs are seeded per draw

Status: decided Date: 2026-09-27

A primitive shader that reads the geometry engine's inputs - its system SGPRs and input VGPRs - is translated once per draw geometry, with those inputs seeded where GFX10's non-passthrough primitive shader receives them. Only a draw one wave holds whole is seeded: non-indexed, one instance, a list of three-vertex primitives, no index offset. Any other draw, and a shader that reads the inputs with no geometry given, is refused by name.

Why: radeonsi's primitive shaders size their output and find their vertices from these inputs; read as zero they emit nothing and the draw counts as done. A shader that never reads them - everything written for the open toolchain - is translated once, as before, so seeding costs nothing where it is not used. Baking the counts in keeps the draw-data buffer the user data's alone (D718).

Rejected: