summaryrefslogtreecommitdiffstats
path: root/src/glsl
diff options
context:
space:
mode:
authorIan Romanick <[email protected]>2010-09-16 12:12:22 +0200
committerIan Romanick <[email protected]>2010-09-17 11:00:24 +0200
commit6e4fe39da26bf101f5fe1103ba426c0903445352 (patch)
tree9d9e40b9499a0f42b4ab42a47eb81c91ef0832fb /src/glsl
parenta47539c7a155475de00fa812842721d239abb3f4 (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.cpp23
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;