diff options
author | Ian Romanick <[email protected]> | 2010-09-16 12:12:22 +0200 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2010-09-17 11:00:24 +0200 |
commit | 6e4fe39da26bf101f5fe1103ba426c0903445352 (patch) | |
tree | 9d9e40b9499a0f42b4ab42a47eb81c91ef0832fb /src/glsl | |
parent | a47539c7a155475de00fa812842721d239abb3f4 (diff) |
glsl2: Refactor testing for whether a deref is of a matrix or array
Diffstat (limited to 'src/glsl')
-rw-r--r-- | src/glsl/lower_variable_index_to_cond_assign.cpp | 23 |
1 files changed, 12 insertions, 11 deletions
diff --git a/src/glsl/lower_variable_index_to_cond_assign.cpp b/src/glsl/lower_variable_index_to_cond_assign.cpp index d9e6379c390..095592b9f7f 100644 --- a/src/glsl/lower_variable_index_to_cond_assign.cpp +++ b/src/glsl/lower_variable_index_to_cond_assign.cpp @@ -217,16 +217,19 @@ public: bool progress; + bool is_array_or_matrix(const ir_instruction *ir) const + { + return (ir->type->is_array() || ir->type->is_matrix()); + } + ir_variable *convert_dereference_array(ir_dereference_array *orig_deref, ir_rvalue* value) { - unsigned length; - if (orig_deref->array->type->is_array()) - length = orig_deref->array->type->length; - else if (orig_deref->array->type->is_matrix()) - length = orig_deref->array->type->matrix_columns; - else - assert(0); + assert(is_array_or_matrix(orig_deref->array)); + + const unsigned length = (orig_deref->array->type->is_array()) + ? orig_deref->array->type->length + : orig_deref->array->type->matrix_columns; void *const mem_ctx = talloc_parent(base_ir); ir_variable *var = @@ -274,8 +277,7 @@ public: ir_dereference_array* orig_deref = (*pir)->as_dereference_array(); if (orig_deref && !orig_deref->array_index->as_constant() - && (orig_deref->array->type->is_array() - || orig_deref->array->type->is_matrix())) { + && is_array_or_matrix(orig_deref->array)) { ir_variable* var = convert_dereference_array(orig_deref, 0); assert(var); *pir = new(talloc_parent(base_ir)) ir_dereference_variable(var); @@ -291,8 +293,7 @@ public: ir_dereference_array *orig_deref = ir->lhs->as_dereference_array(); if (orig_deref && !orig_deref->array_index->as_constant() - && (orig_deref->array->type->is_array() - || orig_deref->array->type->is_matrix())) { + && is_array_or_matrix(orig_deref->array)) { convert_dereference_array(orig_deref, ir->rhs); ir->remove(); this->progress = true; |