Browse Source

glsl: Don't allow array splitting on function arguments.

This is the reason the declaration member existed in the reference
visitor, but I didn't copy the code from structure splitting that
avoided setting it.

This wasn't currently a problem, because we don't allow splitting of
in/out variables.  But that would be nice to change some day.

Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
tags/i965-primitive-restart-v2
Eric Anholt 13 years ago
parent
commit
6de5da0796
1 changed files with 17 additions and 1 deletions
  1. 17
    1
      src/glsl/opt_array_splitting.cpp

+ 17
- 1
src/glsl/opt_array_splitting.cpp View File

@@ -65,7 +65,11 @@ public:
/** Whether this array should be split or not. */
bool split;

bool declaration; /* If the variable had a decl in the instruction stream */
/* If the variable had a decl we can work with in the instruction
* stream. We can't do splitting on function arguments, which
* don't get this variable set.
*/
bool declaration;

ir_variable **components;

@@ -99,6 +103,7 @@ public:
virtual ir_visitor_status visit(ir_variable *);
virtual ir_visitor_status visit(ir_dereference_variable *);
virtual ir_visitor_status visit_enter(ir_dereference_array *);
virtual ir_visitor_status visit_enter(ir_function_signature *);

variable_entry *get_variable_entry(ir_variable *var);

@@ -183,6 +188,17 @@ ir_array_reference_visitor::visit_enter(ir_dereference_array *ir)
return visit_continue_with_parent;
}

ir_visitor_status
ir_array_reference_visitor::visit_enter(ir_function_signature *ir)
{
/* We don't have logic for array-splitting function arguments,
* so just look at the body instructions and not the parameter
* declarations.
*/
visit_list_elements(this, &ir->body);
return visit_continue_with_parent;
}

bool
ir_array_reference_visitor::get_split_list(exec_list *instructions,
bool linked)

Loading…
Cancel
Save