diff options
-rw-r--r-- | src/glsl/linker.cpp | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index 74c2f2d4c92..d9527d4ba2b 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; } |