diff options
author | Ian Romanick <ian.d.romanick@intel.com> | 2010-12-07 19:00:44 -0800 |
---|---|---|
committer | Ian Romanick <ian.d.romanick@intel.com> | 2010-12-07 19:00:44 -0800 |
commit | 002cd2c8d439729227c79093bdbf8a269e72c19f (patch) | |
tree | 65beac3ebca630b32215dce877fded98767fe50d /src/glsl | |
parent | 6f53921c4b9dea8439a851eaa9a4df3791e5649a (diff) | |
download | external_mesa3d-002cd2c8d439729227c79093bdbf8a269e72c19f.zip external_mesa3d-002cd2c8d439729227c79093bdbf8a269e72c19f.tar.gz external_mesa3d-002cd2c8d439729227c79093bdbf8a269e72c19f.tar.bz2 |
linker: Fix regressions caused by previous commit
That's what I get for not running piglit before pushing.
Don't try to patch types of unsized arrays when linking fails.
Don't try to patch types of unsized arrays that are shared between
shader stages.
Diffstat (limited to 'src/glsl')
-rw-r--r-- | src/glsl/linker.cpp | 28 |
1 files changed, 16 insertions, 12 deletions
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp index d7638fa..e62fe6d 100644 --- a/src/glsl/linker.cpp +++ b/src/glsl/linker.cpp @@ -871,23 +871,27 @@ link_intrastage_shaders(void *mem_ctx, * unspecified sizes have a size specified. The size is inferred from the * max_array_access field. */ - foreach_list(node, linked->ir) { - ir_variable *const var = ((ir_instruction *) node)->as_variable(); + if (linked != NULL) { + foreach_list(node, linked->ir) { + ir_variable *const var = ((ir_instruction *) node)->as_variable(); - if (var == NULL) - continue; + if (var == NULL) + continue; - if (!var->type->is_array() || (var->type->length != 0)) - continue; + if ((var->mode != ir_var_auto) && (var->mode != ir_var_temporary)) + continue; - const glsl_type *type = - glsl_type::get_array_instance(var->type->fields.array, - var->max_array_access); + if (!var->type->is_array() || (var->type->length != 0)) + continue; - assert(type != NULL); - var->type = type; - } + const glsl_type *type = + glsl_type::get_array_instance(var->type->fields.array, + var->max_array_access); + assert(type != NULL); + var->type = type; + } + } return linked; } |