diff options
author | marha <marha@users.sourceforge.net> | 2014-07-19 15:00:38 +0200 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2014-07-19 15:00:38 +0200 |
commit | d0c30e7945e76ac119f6d867e27137c8a76f7e15 (patch) | |
tree | 1bfb3148a6f43bdd32746c5b882f9f083076cf91 /mesalib/src/glsl/opt_rebalance_tree.cpp | |
parent | e708bebcc029873004ade4241f347ce8c58896af (diff) | |
download | vcxsrv-d0c30e7945e76ac119f6d867e27137c8a76f7e15.tar.gz vcxsrv-d0c30e7945e76ac119f6d867e27137c8a76f7e15.tar.bz2 vcxsrv-d0c30e7945e76ac119f6d867e27137c8a76f7e15.zip |
fontconfig plink libX11 libxcb mesa git update 19 July 2014
plink revision 10207
xserver commit cfa302d6224d10860e60491333950544c4fb9b04
libxcb commit 49a61c8b459ab19c7f39e653bbb0d0339ea8f00f
libX11 commit 5525e8433f93bce464412f27cffa203ea628f368
fontconfig commit 6781c6baef062eeea5b5b68e4a9c31ea6cd7539b
mesa commit f6fc80734533140a69b30361fe0d4773a03515db
Diffstat (limited to 'mesalib/src/glsl/opt_rebalance_tree.cpp')
-rw-r--r-- | mesalib/src/glsl/opt_rebalance_tree.cpp | 23 |
1 files changed, 22 insertions, 1 deletions
diff --git a/mesalib/src/glsl/opt_rebalance_tree.cpp b/mesalib/src/glsl/opt_rebalance_tree.cpp index 773aab3f6..095f2d7d2 100644 --- a/mesalib/src/glsl/opt_rebalance_tree.cpp +++ b/mesalib/src/glsl/opt_rebalance_tree.cpp @@ -60,6 +60,7 @@ #include "ir_visitor.h" #include "ir_rvalue_visitor.h" #include "ir_optimization.h" +#include "main/macros.h" /* for MAX2 */ /* The DSW algorithm generates a degenerate tree (really, a linked list) in * tree_to_vine(). We'd rather not leave a binary expression with only one @@ -216,7 +217,9 @@ is_reduction(ir_instruction *ir, void *data) * constant fold once split up. Handling matrices will need some more * work. */ - if (expr->type->is_matrix()) { + if (expr->type->is_matrix() || + expr->operands[0]->type->is_matrix() || + (expr->operands[1] && expr->operands[1]->type->is_matrix())) { ird->is_reduction = false; return; } @@ -261,6 +264,22 @@ handle_expression(ir_expression *expr) return expr; } +static void +update_types(ir_instruction *ir, void *) +{ + ir_expression *expr = ir->as_expression(); + if (!expr) + return; + + const glsl_type *const new_type = + glsl_type::get_instance(expr->type->base_type, + MAX2(expr->operands[0]->type->vector_elements, + expr->operands[1]->type->vector_elements), + 1); + assert(new_type != glsl_type::error_type); + expr->type = new_type; +} + void ir_rebalance_visitor::handle_rvalue(ir_rvalue **rvalue) { @@ -285,6 +304,8 @@ ir_rebalance_visitor::handle_rvalue(ir_rvalue **rvalue) if (new_rvalue == *rvalue) return; + visit_tree(new_rvalue, NULL, NULL, update_types); + *rvalue = new_rvalue; this->progress = true; } |