summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2010-12-07 19:00:44 -0800
committerIan Romanick <ian.d.romanick@intel.com>2010-12-07 19:00:44 -0800
commit002cd2c8d439729227c79093bdbf8a269e72c19f (patch)
tree65beac3ebca630b32215dce877fded98767fe50d
parent6f53921c4b9dea8439a851eaa9a4df3791e5649a (diff)
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.
-rw-r--r--src/glsl/linker.cpp28
1 files changed, 16 insertions, 12 deletions
diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp
index d7638facce..e62fe6d7e9 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;
}