aboutsummaryrefslogtreecommitdiff
path: root/mesalib/src/glsl/lower_vec_index_to_cond_assign.cpp
diff options
context:
space:
mode:
authormarha <marha@users.sourceforge.net>2012-11-19 11:21:45 +0100
committermarha <marha@users.sourceforge.net>2012-11-19 11:21:45 +0100
commit57b3e446b9b4017ccfdd3227be481df590740426 (patch)
tree0e4899f530f75d343c090202fc7123c78f9b4866 /mesalib/src/glsl/lower_vec_index_to_cond_assign.cpp
parent24635abae6008bef13e30d798b3f33abab412770 (diff)
parentb3e1e62c45f525cdd332073aaa34d8452cb23374 (diff)
downloadvcxsrv-57b3e446b9b4017ccfdd3227be481df590740426.tar.gz
vcxsrv-57b3e446b9b4017ccfdd3227be481df590740426.tar.bz2
vcxsrv-57b3e446b9b4017ccfdd3227be481df590740426.zip
Merge remote-tracking branch 'origin/released'
* origin/released: git update 19 nov 2012 Added bash script to update released branch Conflicts: mesalib/src/mapi/glapi/gen/gl_API.xml mesalib/src/mesa/program/.gitignore pixman/pixman/pixman-mmx.c xorg-server/Xi/xiquerypointer.c xorg-server/xkb/xkb.c
Diffstat (limited to 'mesalib/src/glsl/lower_vec_index_to_cond_assign.cpp')
-rw-r--r--mesalib/src/glsl/lower_vec_index_to_cond_assign.cpp16
1 files changed, 12 insertions, 4 deletions
diff --git a/mesalib/src/glsl/lower_vec_index_to_cond_assign.cpp b/mesalib/src/glsl/lower_vec_index_to_cond_assign.cpp
index 789f62afe..f85875f49 100644
--- a/mesalib/src/glsl/lower_vec_index_to_cond_assign.cpp
+++ b/mesalib/src/glsl/lower_vec_index_to_cond_assign.cpp
@@ -68,9 +68,9 @@ ir_rvalue *
ir_vec_index_to_cond_assign_visitor::convert_vec_index_to_cond_assign(ir_rvalue *ir)
{
ir_dereference_array *orig_deref = ir->as_dereference_array();
- ir_assignment *assign;
- ir_variable *index, *var;
- ir_dereference *deref;
+ ir_assignment *assign, *value_assign;
+ ir_variable *index, *var, *value;
+ ir_dereference *deref, *deref_value;
unsigned i;
if (!orig_deref)
@@ -95,6 +95,14 @@ ir_vec_index_to_cond_assign_visitor::convert_vec_index_to_cond_assign(ir_rvalue
assign = new(base_ir) ir_assignment(deref, orig_deref->array_index, NULL);
list.push_tail(assign);
+ /* Store the value inside a temp, thus avoiding matrixes duplication */
+ value = new(base_ir) ir_variable(orig_deref->array->type, "vec_value_tmp",
+ ir_var_temporary);
+ list.push_tail(value);
+ deref_value = new(base_ir) ir_dereference_variable(value);
+ value_assign = new(base_ir) ir_assignment(deref_value, orig_deref->array);
+ list.push_tail(value_assign);
+
/* Temporary where we store whichever value we swizzle out. */
var = new(base_ir) ir_variable(ir->type, "vec_index_tmp_v",
ir_var_temporary);
@@ -117,7 +125,7 @@ ir_vec_index_to_cond_assign_visitor::convert_vec_index_to_cond_assign(ir_rvalue
* underlying variable.
*/
ir_rvalue *swizzle =
- new(base_ir) ir_swizzle(orig_deref->array->clone(mem_ctx, NULL),
+ new(base_ir) ir_swizzle(deref_value->clone(mem_ctx, NULL),
i, 0, 0, 0, 1);
deref = new(base_ir) ir_dereference_variable(var);