Ver código fonte

glsl2: Refactor testing for whether a deref is of a matrix or array

tags/snb-magic
Ian Romanick 15 anos atrás
pai
commit
6e4fe39da2
1 arquivos alterados com 12 adições e 11 exclusões
  1. 12
    11
      src/glsl/lower_variable_index_to_cond_assign.cpp

+ 12
- 11
src/glsl/lower_variable_index_to_cond_assign.cpp Ver arquivo

@@ -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;

Carregando…
Cancelar
Salvar