st/mesa: fix lowered IO - don't call st_nir_assign_vs_in_locations twice
authorMarek Olšák <marek.olsak@amd.com>
Tue, 1 Sep 2020 16:19:32 +0000 (12:19 -0400)
committerMarge Bot <eric+marge@anholt.net>
Wed, 2 Sep 2020 20:05:05 +0000 (20:05 +0000)
If IO is lowered, the second call is a no-op, which breaks:
   spec@!opengl 1.1@gl-1.1-color-material-unused-normal-array

Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
Reviewed-by: Eric Anholt <eric@anholt.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6540>

src/mesa/state_tracker/st_program.c

index f052655efcee8d76ef5734eac9d8972dd634915d..f9348fd08e8638e61b2c300dff288252aa9b90dd 100644 (file)
@@ -367,6 +367,9 @@ st_finalize_nir_before_variants(struct nir_shader *nir)
       NIR_PASS_V(nir, nir_lower_io_arrays_to_elements_no_indirects, true);
    }
 
+   /* st_nir_assign_vs_in_locations requires correct shader info. */
+   nir_shader_gather_info(nir, nir_shader_get_entrypoint(nir));
+
    st_nir_assign_vs_in_locations(nir);
 }
 
@@ -528,20 +531,6 @@ st_translate_vertex_program(struct st_context *st,
          stp->state.type = PIPE_SHADER_IR_NIR;
          stp->Base.nir = st_translate_prog_to_nir(st, &stp->Base,
                                                   MESA_SHADER_VERTEX);
-
-         /* We must update stp->Base.info after translation and before
-          * st_prepare_vertex_program is called, because inputs_read
-          * may become outdated after NIR optimization passes.
-          *
-          * For ffvp/ARB_vp inputs_read is populated based
-          * on declared attributes without taking their usage into
-          * consideration. When creating shader variants we expect
-          * that their inputs_read would match the base ones for
-          * input mapping to work properly.
-          */
-         nir_shader_gather_info(stp->Base.nir,
-                                nir_shader_get_entrypoint(stp->Base.nir));
-         st_nir_assign_vs_in_locations(stp->Base.nir);
          stp->Base.info = stp->Base.nir->info;
 
          /* For st_draw_feedback, we need to generate TGSI too if draw doesn't