Mesa (master): glsl: build stageref mask using IR, not symbol table

Tapani Pälli tpalli at kemper.freedesktop.org
Wed Jul 1 12:20:03 UTC 2015


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

Author: Tapani Pälli <tapani.palli at intel.com>
Date:   Mon Jun 29 14:19:00 2015 +0300

glsl: build stageref mask using IR, not symbol table

Instead of using symbol table, build mask by inspecting IR. This
change is required by further patches to move resource list creation
to happen later when symbol table does not exist anymore.

Signed-off-by: Tapani Pälli <tapani.palli at intel.com>
Reviewed-by: Martin Peres <martin.peres at linux.intel.com>

---

 src/glsl/linker.cpp |   14 +++++++++++---
 1 file changed, 11 insertions(+), 3 deletions(-)

diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index 74c2f2d..d9527d4 100644
--- a/src/glsl/linker.cpp
+++ b/src/glsl/linker.cpp
@@ -2624,9 +2624,17 @@ build_stageref(struct gl_shader_program *shProg, const char *name)
       struct gl_shader *sh = shProg->_LinkedShaders[i];
       if (!sh)
          continue;
-      ir_variable *var = sh->symbols->get_variable(name);
-      if (var)
-         stages |= (1 << i);
+
+      /* Shader symbol table may contain variables that have
+       * been optimized away. Search IR for the variable instead.
+       */
+      foreach_in_list(ir_instruction, node, sh->ir) {
+         ir_variable *var = node->as_variable();
+         if (var && strcmp(var->name, name) == 0) {
+            stages |= (1 << i);
+            break;
+         }
+      }
    }
    return stages;
 }




More information about the mesa-commit mailing list