[Mesa-dev] [PATCH 1/5] glsl: Make opt_constant_variable() bail in useless cases.

Kenneth Graunke kenneth at whitecape.org
Mon May 9 06:50:10 UTC 2016


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 at whitecape.org>
---
 src/compiler/glsl/opt_constant_variable.cpp | 7 +++++++
 1 file changed, 7 insertions(+)

diff --git a/src/compiler/glsl/opt_constant_variable.cpp b/src/compiler/glsl/opt_constant_variable.cpp
index 3ddb129..1c06ffe 100644
--- a/src/compiler/glsl/opt_constant_variable.cpp
+++ b/src/compiler/glsl/opt_constant_variable.cpp
@@ -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;
-- 
2.8.2



More information about the mesa-dev mailing list