~ubuntu-branches/ubuntu/precise/mesa/precise-updates

« back to all changes in this revision

Viewing changes to src/glsl/lower_vec_index_to_cond_assign.cpp

  • Committer: Bazaar Package Importer
  • Author(s): Christopher James Halse Rogers
  • Date: 2011-08-04 16:25:08 UTC
  • mfrom: (1.2.37 upstream)
  • Revision ID: james.westby@ubuntu.com-20110804162508-kujg82moxerjg1kk
Tags: 7.11-0ubuntu1
* Fake merge from Debian experimental, updating previous changelog entries.
  New upstream release fixes infrequent X crash (LP: #800778).
  Remaining Ubuntu changes:
 - debian/control
    + Drop lesstif-dev from Build-Depends; it's in Universe.
    + Comment out GLw libs since it depends on lesstif-dev.
    + Drop i686 swx11 libgl package.
    + Add libdrm-dev to mesa-common-dev Depends.
    + Drop libwayland-dev from Build-Depends; it's in Universe.
    + Update Breaks for Ubuntu versions
    + Enable llvm on armel as well as i386 and amd64
  - debian/rules
    + Use --disable-glw for swx11 targets too.
    + Don't enable motif for swx11 targets.
    + Use lzma compression for binary debs to save CD space.
    + Drop unloved mach64 driver.
    + Use --enable-shared-dricore to claw back CD space.
    + Enable llvmpipe software rasteriser.
    + Enable llvm on armel as well as i386 and amd64
  - debian/patches
    + 100_no_abi_tag.patch
    + 101_ubuntu_hidden_glname.patch
    + 103_savage-expose_fbmodes_with_nonzero_alpha.patch
  - rules, libgl1-mesa-{glx,dev,swx11,swx11-dev}.install.in,
    libgl1-mesa-{glx,swx11}.{postinst,prerm}.in, libgl1-mesa-dev.links.in:
    Install libGL.so* in /usr/lib/mesa to allow things to work with
    alternatives.
  - debian/not-installed:
    + Drop i686 files; we don't build 686-optimised packages in the first
      place.
  - debian/gbp.conf
    + Point at Ubuntu branch to make git-buildpackage less narky.
  - 113_fix_tls.diff: Fix crashes in unrelated code due to TLS usage.
  - debian/patches/111_export_searchdirs_in_dripc.diff:
    + Add drisearchdirs variable to dri.pc so the Xserver can pick up the
      alternate DRI driver dirs.
  - debian/patches/115_llvm_dynamic_linking.diff
    + Dynamically link DRI drivers to libllvm.  Saves ~6MiB per DRI driver.
  - debian/patches/116_use_shared_galliumcore.diff:
  - debian/libgl1-mesa-dri.install.in:
    + Link gallium DRI drivers against shared gallium routines to save CD
      space.
* debian/rules:
* debian/libgl1-mesa-dri-experimental.install.{i386,amd64}.in
  - Explicitly install i915g only when it has been built, matching what is
    done with r300g.
* debian/rules:
* debian/control:
* debian/libegl1-mesa{,-dev}.install.in:
* debian/libegl1-mesa.symbols:
  - Enable the Wayland EGL backend.
* debian/rules:
* debian/libegl1-mesa.{postinst,prerm,install}.in:
* debian/libegl1-mesa-dev.{install,links}.in:
* debian/libgles{1,2}-mesa.install.in:
* debian/libgles{1,2}-mesa-dev.links.in:
* debian/libopenvg1-mesa{,-dev}.install.in:
* debian/libopenvg1-mesa-dev.links.in:
  - Use alternatives for libEGL to match the handling of libGL.
    libEGL (and associated GL|ES and OpenVG libraries) now live in
    /usr/lib/$MULTIARCH/mesa-egl.  (LP: #812639)
* debian/patches/118_fix_24bpp_software_rendering.diff:
  - Cherry pick upstream patch from master fixing graphical corruption when
    using a 24bpp framebuffer and software rendering. (LP: #810339)
* debian/rules:
* debian/clean:
  - Generate xmlpool pot file and clean up other po files for
    pkgbinarymangler's benefit (LP: #410264).
* debian/patches/119_r600g_gnome_shell_rendering_fix.diff:
  - Cherry pick upstream commit fixing rendering corruption in gnome-shell
    (and therefore likely Unity as well).

Show diffs side-by-side

added added

removed removed

Lines of Context:
171
171
 
172
172
   assert(orig_deref->array_index->type->base_type == GLSL_TYPE_INT);
173
173
 
 
174
   exec_list list;
 
175
 
174
176
   /* Store the index to a temporary to avoid reusing its tree. */
175
177
   index = new(ir) ir_variable(glsl_type::int_type, "vec_index_tmp_i",
176
178
                               ir_var_temporary);
177
 
   ir->insert_before(index);
 
179
   list.push_tail(index);
178
180
   deref = new(ir) ir_dereference_variable(index);
179
181
   assign = new(ir) ir_assignment(deref, orig_deref->array_index, NULL);
180
 
   ir->insert_before(assign);
 
182
   list.push_tail(assign);
181
183
 
182
184
   /* Store the RHS to a temporary to avoid reusing its tree. */
183
185
   var = new(ir) ir_variable(ir->rhs->type, "vec_index_tmp_v",
184
186
                             ir_var_temporary);
185
 
   ir->insert_before(var);
 
187
   list.push_tail(var);
186
188
   deref = new(ir) ir_dereference_variable(var);
187
189
   assign = new(ir) ir_assignment(deref, ir->rhs, NULL);
188
 
   ir->insert_before(assign);
 
190
   list.push_tail(assign);
189
191
 
190
192
   /* Generate a conditional move of each vector element to the temp. */
191
193
   for (i = 0; i < orig_deref->array->type->vector_elements; i++) {
205
207
 
206
208
      deref = new(ir) ir_dereference_variable(var);
207
209
      assign = new(ir) ir_assignment(swizzle, deref, condition);
208
 
      ir->insert_before(assign);
209
 
   }
 
210
      list.push_tail(assign);
 
211
   }
 
212
 
 
213
   /* If the original assignment has a condition, respect that original
 
214
    * condition!  This is acomplished by wrapping the new conditional
 
215
    * assignments in an if-statement that uses the original condition.
 
216
    */
 
217
   if (ir->condition != NULL) {
 
218
      /* No need to clone the condition because the IR that it hangs on is
 
219
       * going to be removed from the instruction sequence.
 
220
       */
 
221
      ir_if *if_stmt = new(mem_ctx) ir_if(ir->condition);
 
222
 
 
223
      list.move_nodes_to(&if_stmt->then_instructions);
 
224
      ir->insert_before(if_stmt);
 
225
   } else {
 
226
      ir->insert_before(&list);
 
227
   }
 
228
 
210
229
   ir->remove();
211
230
 
212
231
   this->progress = true;