glsl: Make opt_constant_variable() bail in useless cases.
The pass ultimately skips over any entries with assignment_count != 1, so there's no need to do further work once we've determined that there are multiple assignments. The constant value could be a large array (i.e. uvec4[327]), at which point skipping the constant_expression_value() call (and the clone() call within) can save us piles of memory. 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:
@@ -102,6 +102,13 @@ ir_constant_variable_visitor::visit_enter(ir_assignment *ir)
|
||||
assert(entry);
|
||||
entry->assignment_count++;
|
||||
|
||||
/* If there's more than one assignment, don't bother - we won't do anything
|
||||
* with this variable anyway, and continuing just wastes memory cloning
|
||||
* constant expressions.
|
||||
*/
|
||||
if (entry->assignment_count > 1)
|
||||
return visit_continue;
|
||||
|
||||
/* If it's already constant, don't do the work. */
|
||||
if (entry->var->constant_value)
|
||||
return visit_continue;
|
||||
|
Reference in New Issue
Block a user