mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2025-12-24 17:30:12 +01:00
glsl: Avoid excess tree walking when folding ir_dereference_arrays.
If an ir_dereference_array has non-constant components, there's no point in trying to evaluate its value (which involves walking down the tree and possibly allocating memory for portions of the subtree which are constant). This also removes convoluted tree walking in opt_constant_folding(), which tries to fold constants while walking up the tree. No need to walk down, then up, then down again. We did this for swizzles and expressions already, but I was lazy back in the day and didn't do this for ir_dereference_array. No change in shader-db. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
This commit is contained in:
parent
329fe93210
commit
db8fcbbaf9
1 changed files with 6 additions and 0 deletions
|
|
@ -85,6 +85,12 @@ ir_constant_fold(ir_rvalue **rvalue)
|
|||
if (swiz && !swiz->val->as_constant())
|
||||
return false;
|
||||
|
||||
/* Ditto for array dereferences */
|
||||
ir_dereference_array *array_ref = (*rvalue)->as_dereference_array();
|
||||
if (array_ref && (!array_ref->array->as_constant() ||
|
||||
!array_ref->array_index->as_constant()))
|
||||
return false;
|
||||
|
||||
ir_constant *constant = (*rvalue)->constant_expression_value();
|
||||
if (constant) {
|
||||
*rvalue = constant;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue