panfrost: Lower vertex_id for XFB
authorAlyssa Rosenzweig <alyssa@rosenzweig.io>
Wed, 19 Jul 2023 12:02:22 +0000 (08:02 -0400)
committerMarge Bot <emma+marge@anholt.net>
Thu, 20 Jul 2023 01:25:34 +0000 (01:25 +0000)
Even on Valhall, vertex_id is zero-based in a transform feedback program. Lower
that for transform feedback programs properly since it wouldn't happen
automatically on Valhall. Fixes assertion fails.

Fixes: 91ffd103510 ("pan/bi: Lower gl_VertexID in NIR")
Signed-off-by: Alyssa Rosenzweig <alyssa@rosenzweig.io>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24198>

src/panfrost/util/pan_lower_xfb.c

index 3876e60..56ddd32 100644 (file)
@@ -65,6 +65,20 @@ lower_xfb(nir_builder *b, nir_instr *instr, UNUSED void *data)
       return false;
 
    nir_intrinsic_instr *intr = nir_instr_as_intrinsic(instr);
+
+   /* In transform feedback programs, vertex ID becomes zero-based, so apply
+    * that lowering even on Valhall.
+    */
+   if (intr->intrinsic == nir_intrinsic_load_vertex_id) {
+      b->cursor = nir_instr_remove(instr);
+
+      nir_ssa_def *repl =
+         nir_iadd(b, nir_load_vertex_id_zero_base(b), nir_load_first_vertex(b));
+
+      nir_ssa_def_rewrite_uses(&intr->dest.ssa, repl);
+      return true;
+   }
+
    if (intr->intrinsic != nir_intrinsic_store_output)
       return false;