compiler/nir: introduce a new helper to get varying name
authorLionel Landwerlin <lionel.g.landwerlin@intel.com>
Fri, 27 Nov 2020 10:26:34 +0000 (12:26 +0200)
committerMarge Bot <eric+marge@anholt.net>
Tue, 1 Dec 2020 08:20:38 +0000 (08:20 +0000)
As we now reuse the enums to remain within 64 values, we need to get
the proper name using the stage.

v2: Use enum type for parameter (Jason)

Signed-off-by: Lionel Landwerlin <lionel.g.landwerlin@intel.com>
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7795>

src/compiler/nir/nir_print.c
src/compiler/shader_enums.c
src/compiler/shader_enums.h

index dc8b67c..b3edd8c 100644 (file)
@@ -538,18 +538,23 @@ print_var_decl(nir_variable *var, print_state *state)
          if (var->data.mode == nir_var_shader_in)
             loc = gl_vert_attrib_name(var->data.location);
          else if (var->data.mode == nir_var_shader_out)
-            loc = gl_varying_slot_name(var->data.location);
+            loc = gl_varying_slot_name_for_stage(var->data.location,
+                                                 state->shader->info.stage);
          break;
       case MESA_SHADER_GEOMETRY:
          if ((var->data.mode == nir_var_shader_in) ||
-             (var->data.mode == nir_var_shader_out))
-            loc = gl_varying_slot_name(var->data.location);
+             (var->data.mode == nir_var_shader_out)) {
+            loc = gl_varying_slot_name_for_stage(var->data.location,
+                                                 state->shader->info.stage);
+         }
          break;
       case MESA_SHADER_FRAGMENT:
-         if (var->data.mode == nir_var_shader_in)
-            loc = gl_varying_slot_name(var->data.location);
-         else if (var->data.mode == nir_var_shader_out)
+         if (var->data.mode == nir_var_shader_in) {
+            loc = gl_varying_slot_name_for_stage(var->data.location,
+                                                 state->shader->info.stage);
+         } else if (var->data.mode == nir_var_shader_out) {
             loc = gl_frag_result_name(var->data.location);
+         }
          break;
       case MESA_SHADER_TESS_CTRL:
       case MESA_SHADER_TESS_EVAL:
index 543678f..d6fe197 100644 (file)
@@ -228,6 +228,14 @@ gl_varying_slot_name(gl_varying_slot slot)
 }
 
 const char *
+gl_varying_slot_name_for_stage(gl_varying_slot slot, gl_shader_stage stage)
+{
+   if (stage != MESA_SHADER_FRAGMENT && slot == VARYING_SLOT_PRIMITIVE_SHADING_RATE)
+      return "VARYING_SLOT_PRIMITIVE_SHADING_RATE";
+   return gl_varying_slot_name(slot);
+}
+
+const char *
 gl_system_value_name(gl_system_value sysval)
 {
    static const char *names[] = {
index 3002025..eb96a91 100644 (file)
@@ -333,6 +333,9 @@ typedef enum
 #define MAX_VARYINGS_INCL_PATCH (VARYING_SLOT_TESS_MAX - VARYING_SLOT_VAR0)
 
 const char *gl_varying_slot_name(gl_varying_slot slot);
+const char *gl_varying_slot_name_for_stage(gl_varying_slot slot,
+                                           gl_shader_stage stage);
+
 
 /**
  * Bitflags for varying slots.