diff options
author | marha <marha@users.sourceforge.net> | 2012-11-19 11:21:45 +0100 |
---|---|---|
committer | marha <marha@users.sourceforge.net> | 2012-11-19 11:21:45 +0100 |
commit | 57b3e446b9b4017ccfdd3227be481df590740426 (patch) | |
tree | 0e4899f530f75d343c090202fc7123c78f9b4866 /mesalib/src/glsl/lower_vec_index_to_cond_assign.cpp | |
parent | 24635abae6008bef13e30d798b3f33abab412770 (diff) | |
parent | b3e1e62c45f525cdd332073aaa34d8452cb23374 (diff) | |
download | vcxsrv-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.cpp | 16 |
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); |