glsl: move nir_remap_dual_slot_attributes() call out of glsl_to_nir()
authorTimothy Arceri <tarceri@itsqueeze.com>
Fri, 6 Dec 2019 02:53:24 +0000 (13:53 +1100)
committerTimothy Arceri <tarceri@itsqueeze.com>
Fri, 13 Dec 2019 00:07:19 +0000 (00:07 +0000)
In order to be able to implement a NIR based glsl linker we need to
build the program resource list with NIR. This change delays the
remaping so that a later commit can call the NIR based resource
list builder.

Reviewed-by: Alejandro PiƱeiro <apinheiro@igalia.com>
src/compiler/glsl/glsl_to_nir.cpp
src/mesa/drivers/dri/i965/brw_program.c
src/mesa/state_tracker/st_glsl_to_nir.cpp

index 09bb11f92e7da0897f3a6181ed94f6e446d800cb..dadcf69a5398d82dae112175a59d29d7d96e50bc 100644 (file)
@@ -235,13 +235,6 @@ glsl_to_nir(struct gl_context *ctx,
       }
    }
 
-   /* Remap the locations to slots so those requiring two slots will occupy
-    * two locations. For instance, if we have in the IR code a dvec3 attr0 in
-    * location 0 and vec4 attr1 in location 1, in NIR attr0 will use
-    * locations/slots 0 and 1, and attr1 will use location/slot 2 */
-   if (shader->info.stage == MESA_SHADER_VERTEX)
-      nir_remap_dual_slot_attributes(shader, &sh->Program->DualSlotInputs);
-
    shader->info.name = ralloc_asprintf(shader, "GLSL%d", shader_prog->Name);
    if (shader_prog->Label)
       shader->info.label = ralloc_strdup(shader, shader_prog->Label);
index 16762fc661b064d0a56078072a6546d08e7cd03d..4a76ee58ddde8b838d871c83d12ebd76e6f2008c 100644 (file)
@@ -95,6 +95,14 @@ brw_create_nir(struct brw_context *brw,
          nir = _mesa_spirv_to_nir(ctx, shader_prog, stage, options);
       } else {
          nir = glsl_to_nir(ctx, shader_prog, stage, options);
+
+         /* Remap the locations to slots so those requiring two slots will
+          * occupy two locations. For instance, if we have in the IR code a
+          * dvec3 attr0 in location 0 and vec4 attr1 in location 1, in NIR attr0
+          * will use locations/slots 0 and 1, and attr1 will use location/slot 2
+          */
+         if (nir->info.stage == MESA_SHADER_VERTEX)
+            nir_remap_dual_slot_attributes(nir, &prog->DualSlotInputs);
       }
       assert (nir);
 
index 7a417d98f140963aeb8461a0d6e40563be905870..a1b7b499cff5fc39b273147ca7219113efb06ba4 100644 (file)
@@ -732,6 +732,14 @@ st_link_nir(struct gl_context *ctx,
       if (num_shaders == 1)
          st_nir_opts(nir);
 
+      /* Remap the locations to slots so those requiring two slots will occupy
+       * two locations. For instance, if we have in the IR code a dvec3 attr0 in
+       * location 0 and vec4 attr1 in location 1, in NIR attr0 will use
+       * locations/slots 0 and 1, and attr1 will use location/slot 2
+       */
+      if (nir->info.stage == MESA_SHADER_VERTEX && !shader_program->data->spirv)
+         nir_remap_dual_slot_attributes(nir, &shader->Program->DualSlotInputs);
+
       NIR_PASS_V(nir, st_nir_lower_wpos_ytransform, shader->Program,
                  st->pipe->screen);