Mesa (master): glsl/linker: Add add_shader_variable() helper

Kristian Høgsberg krh at kemper.freedesktop.org
Tue Apr 12 21:48:31 UTC 2016


Module: Mesa
Branch: master
Commit: 8ab6aae4dcecba4e77f6777606e92cf2c2f1f83e
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=8ab6aae4dcecba4e77f6777606e92cf2c2f1f83e

Author: Kristian Høgsberg Kristensen <kristian.h.kristensen at intel.com>
Date:   Mon Apr 11 12:57:41 2016 -0700

glsl/linker: Add add_shader_variable() helper

This consolidates the combination of create_shader_variable() and
add_program_resource() into a new helper function. No functional
difference, but we'll expand add_shader_variable() in the next few
commits.

Signed-off-by: Kristian Høgsberg Kristensen <kristian.h.kristensen at intel.com>
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

---

 src/compiler/glsl/linker.cpp | 42 +++++++++++++++++++++++-------------------
 1 file changed, 23 insertions(+), 19 deletions(-)

diff --git a/src/compiler/glsl/linker.cpp b/src/compiler/glsl/linker.cpp
index 10b5a8f..63b3fdf 100644
--- a/src/compiler/glsl/linker.cpp
+++ b/src/compiler/glsl/linker.cpp
@@ -3569,6 +3569,19 @@ create_shader_variable(struct gl_shader_program *shProg,
 }
 
 static bool
+add_shader_variable(struct gl_shader_program *shProg, unsigned stage_mask,
+                    GLenum programInterface, ir_variable *var,
+                    bool use_implicit_location, int location_bias)
+{
+   gl_shader_variable *sha_v =
+      create_shader_variable(shProg, var, use_implicit_location, location_bias);
+   if (!sha_v)
+      return false;
+
+   return add_program_resource(shProg, programInterface, sha_v, stage_mask);
+}
+
+static bool
 add_interface_variables(struct gl_shader_program *shProg,
                         unsigned stage, GLenum programInterface)
 {
@@ -3616,12 +3629,8 @@ add_interface_variables(struct gl_shader_program *shProg,
          (stage == MESA_SHADER_VERTEX && var->data.mode == ir_var_shader_in) ||
          (stage == MESA_SHADER_FRAGMENT && var->data.mode == ir_var_shader_out);
 
-      gl_shader_variable *sha_v =
-         create_shader_variable(shProg, var, vs_input_or_fs_output, loc_bias);
-      if (!sha_v)
-         return false;
-
-      if (!add_program_resource(shProg, programInterface, sha_v, 1 << stage))
+      if (!add_shader_variable(shProg, 1 << stage, programInterface,
+                               var, vs_input_or_fs_output, loc_bias))
          return false;
    }
    return true;
@@ -3651,13 +3660,10 @@ add_packed_varyings(struct gl_shader_program *shProg, int stage, GLenum type)
          }
 
          if (type == iface) {
-            gl_shader_variable *sha_v =
-               create_shader_variable(shProg, var, false, VARYING_SLOT_VAR0);
-            if (!sha_v)
-               return false;
-            if (!add_program_resource(shProg, iface, sha_v,
-                                      build_stageref(shProg, sha_v->name,
-                                                     sha_v->mode)))
+            const int stage_mask =
+               build_stageref(shProg, var->name, var->data.mode);
+            if (!add_shader_variable(shProg, stage_mask,
+                                     iface, var, false, VARYING_SLOT_VAR0))
                return false;
          }
       }
@@ -3677,12 +3683,10 @@ add_fragdata_arrays(struct gl_shader_program *shProg)
       ir_variable *var = node->as_variable();
       if (var) {
          assert(var->data.mode == ir_var_shader_out);
-         gl_shader_variable *sha_v =
-            create_shader_variable(shProg, var, true, FRAG_RESULT_DATA0);
-         if (!sha_v)
-            return false;
-         if (!add_program_resource(shProg, GL_PROGRAM_OUTPUT, sha_v,
-                                   1 << MESA_SHADER_FRAGMENT))
+
+         if (!add_shader_variable(shProg,
+                                  1 << MESA_SHADER_FRAGMENT,
+                                  GL_PROGRAM_OUTPUT, var, true, FRAG_RESULT_DATA0))
             return false;
       }
    }




More information about the mesa-commit mailing list