[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

mesa: Changes to 'ubuntu+1'



 .dir-locals.el                                             |    2 
 debian/changelog                                           |   38 
 debian/control                                             |   40 
 debian/mesa-opencl-icd.install.in                          |    3 
 debian/patches/egl-platform-mir.patch                      |  250 +++--
 debian/rules                                               |   10 
 docs/GL3.txt                                               |   11 
 docs/index.html                                            |    8 
 docs/relnotes.html                                         |    1 
 docs/relnotes/10.4.4.html                                  |  100 ++
 docs/relnotes/10.5.0.html                                  |    1 
 include/D3D9/d3d9types.h                                   |    5 
 include/GL/glext.h                                         |   57 -
 scons/llvm.py                                              |   16 
 src/egl/drivers/dri2/platform_x11.c                        |   24 
 src/gallium/auxiliary/Makefile.sources                     |    1 
 src/gallium/auxiliary/draw/draw_llvm.c                     |    2 
 src/gallium/auxiliary/draw/draw_llvm.h                     |    2 
 src/gallium/auxiliary/gallivm/lp_bld_init.c                |    2 
 src/gallium/auxiliary/hud/font.c                           |   24 
 src/gallium/auxiliary/hud/hud_context.c                    |    1 
 src/gallium/auxiliary/postprocess/pp_mlaa.c                |    3 
 src/gallium/auxiliary/target-helpers/inline_debug_helper.h |    4 
 src/gallium/auxiliary/tgsi/tgsi_opcode_tmp.h               |    4 
 src/gallium/auxiliary/tgsi/tgsi_parse.c                    |   12 
 src/gallium/auxiliary/tgsi/tgsi_parse.h                    |    2 
 src/gallium/auxiliary/tgsi/tgsi_ureg.c                     |   28 
 src/gallium/auxiliary/tgsi/tgsi_ureg.h                     |   25 
 src/gallium/auxiliary/util/u_cache.c                       |    2 
 src/gallium/auxiliary/util/u_math.h                        |   14 
 src/gallium/auxiliary/util/u_pstipple.c                    |   25 
 src/gallium/auxiliary/util/u_pstipple.h                    |    3 
 src/gallium/auxiliary/util/u_simple_list.h                 |  199 ----
 src/gallium/auxiliary/util/u_simple_shaders.c              |   12 
 src/gallium/auxiliary/util/u_slab.c                        |    2 
 src/gallium/auxiliary/util/u_tests.c                       |  301 +++++-
 src/gallium/auxiliary/util/u_tests.h                       |    4 
 src/gallium/docs/source/screen.rst                         |    5 
 src/gallium/docs/source/tgsi.rst                           |   18 
 src/gallium/drivers/freedreno/.dir-locals.el               |    2 
 src/gallium/drivers/freedreno/freedreno_screen.c           |    2 
 src/gallium/drivers/i915/i915_screen.c                     |    2 
 src/gallium/drivers/ilo/ilo_screen.c                       |    3 
 src/gallium/drivers/llvmpipe/lp_context.c                  |    2 
 src/gallium/drivers/llvmpipe/lp_scene.c                    |    2 
 src/gallium/drivers/llvmpipe/lp_screen.c                   |    7 
 src/gallium/drivers/llvmpipe/lp_state_fs.c                 |    2 
 src/gallium/drivers/llvmpipe/lp_state_setup.c              |    2 
 src/gallium/drivers/llvmpipe/lp_texture.c                  |    2 
 src/gallium/drivers/nouveau/nv30/nv30_screen.c             |    2 
 src/gallium/drivers/nouveau/nv50/nv50_screen.c             |    2 
 src/gallium/drivers/nouveau/nvc0/nvc0_screen.c             |    2 
 src/gallium/drivers/r300/r300_context.c                    |    2 
 src/gallium/drivers/r300/r300_flush.c                      |    2 
 src/gallium/drivers/r300/r300_query.c                      |    2 
 src/gallium/drivers/r300/r300_reg.h                        |   22 
 src/gallium/drivers/r300/r300_screen.c                     |    8 
 src/gallium/drivers/r300/r300_state.c                      |    1 
 src/gallium/drivers/r300/r300_state_inlines.h              |    1 
 src/gallium/drivers/r600/.dir-locals.el                    |    2 
 src/gallium/drivers/r600/r600_asm.c                        |    6 
 src/gallium/drivers/r600/r600_pipe.c                       |    3 
 src/gallium/drivers/r600/r600_shader.c                     |   63 +
 src/gallium/drivers/r600/r700_asm.c                        |    1 
 src/gallium/drivers/r600/sb/sb_expr.cpp                    |    2 
 src/gallium/drivers/radeon/.dir-locals.el                  |    2 
 src/gallium/drivers/radeon/r600_pipe_common.c              |   11 
 src/gallium/drivers/radeon/r600_pipe_common.h              |    1 
 src/gallium/drivers/radeon/r600_streamout.c                |    4 
 src/gallium/drivers/radeonsi/.dir-locals.el                |    2 
 src/gallium/drivers/radeonsi/si_compute.c                  |  117 +-
 src/gallium/drivers/radeonsi/si_descriptors.c              |  111 +-
 src/gallium/drivers/radeonsi/si_hw_context.c               |    1 
 src/gallium/drivers/radeonsi/si_pipe.c                     |   13 
 src/gallium/drivers/radeonsi/si_pipe.h                     |   10 
 src/gallium/drivers/radeonsi/si_pm4.c                      |   12 
 src/gallium/drivers/radeonsi/si_pm4.h                      |    1 
 src/gallium/drivers/radeonsi/si_shader.c                   |  101 +-
 src/gallium/drivers/radeonsi/si_shader.h                   |    8 
 src/gallium/drivers/radeonsi/si_state.c                    |   75 +
 src/gallium/drivers/radeonsi/si_state.h                    |   18 
 src/gallium/drivers/radeonsi/si_state_draw.c               |   43 
 src/gallium/drivers/radeonsi/si_state_shaders.c            |  139 ++
 src/gallium/drivers/rbug/rbug_context.c                    |    2 
 src/gallium/drivers/rbug/rbug_core.c                       |    2 
 src/gallium/drivers/rbug/rbug_objects.c                    |    2 
 src/gallium/drivers/rbug/rbug_screen.c                     |    2 
 src/gallium/drivers/softpipe/sp_screen.c                   |    4 
 src/gallium/drivers/softpipe/sp_state_shader.c             |    2 
 src/gallium/drivers/svga/svga_screen.c                     |    2 
 src/gallium/drivers/trace/tr_context.c                     |    2 
 src/gallium/drivers/trace/tr_screen.c                      |    2 
 src/gallium/drivers/trace/tr_texture.c                     |    2 
 src/gallium/drivers/vc4/.dir-locals.el                     |    2 
 src/gallium/drivers/vc4/kernel/.dir-locals.el              |    2 
 src/gallium/drivers/vc4/vc4_opt_algebraic.c                |   43 
 src/gallium/drivers/vc4/vc4_program.c                      |    2 
 src/gallium/drivers/vc4/vc4_qir.c                          |   15 
 src/gallium/drivers/vc4/vc4_qir.h                          |    7 
 src/gallium/drivers/vc4/vc4_screen.c                       |    2 
 src/gallium/include/pipe/p_defines.h                       |    4 
 src/gallium/include/pipe/p_state.h                         |    2 
 src/gallium/state_trackers/dri/dri_context.c               |    7 
 src/gallium/state_trackers/dri/dri_drawable.c              |    2 
 src/gallium/state_trackers/dri/drisw.c                     |    2 
 src/gallium/state_trackers/nine/adapter9.c                 |  249 ++---
 src/gallium/state_trackers/nine/basetexture9.c             |   15 
 src/gallium/state_trackers/nine/cubetexture9.c             |    7 
 src/gallium/state_trackers/nine/device9.c                  |  250 ++++-
 src/gallium/state_trackers/nine/device9.h                  |    7 
 src/gallium/state_trackers/nine/nine_ff.c                  |    7 
 src/gallium/state_trackers/nine/nine_helpers.h             |    4 
 src/gallium/state_trackers/nine/nine_pipe.c                |  125 --
 src/gallium/state_trackers/nine/nine_pipe.h                |  111 ++
 src/gallium/state_trackers/nine/nine_shader.c              |  103 +-
 src/gallium/state_trackers/nine/nine_shader.h              |   22 
 src/gallium/state_trackers/nine/nine_state.c               |  310 ++++--
 src/gallium/state_trackers/nine/nine_state.h               |   15 
 src/gallium/state_trackers/nine/pixelshader9.c             |    1 
 src/gallium/state_trackers/nine/resource9.c                |    3 
 src/gallium/state_trackers/nine/stateblock9.c              |    6 
 src/gallium/state_trackers/nine/surface9.c                 |   32 
 src/gallium/state_trackers/nine/swapchain9.c               |   60 -
 src/gallium/state_trackers/nine/texture9.c                 |    7 
 src/gallium/state_trackers/nine/vertexdeclaration9.c       |   11 
 src/gallium/state_trackers/nine/vertexshader9.c            |    2 
 src/gallium/state_trackers/nine/volume9.c                  |   12 
 src/gallium/state_trackers/nine/volumetexture9.c           |    7 
 src/gallium/state_trackers/osmesa/osmesa.c                 |    2 
 src/gallium/targets/d3dadapter9/drm.c                      |   71 -
 src/gallium/targets/dri/Makefile.am                        |    1 
 src/gallium/winsys/radeon/.dir-locals.el                   |    2 
 src/gallium/winsys/radeon/drm/radeon_drm_bo.c              |    2 
 src/glsl/Makefile.sources                                  |    2 
 src/glsl/README                                            |    2 
 src/glsl/ast_to_hir.cpp                                    |   21 
 src/glsl/glsl_lexer.ll                                     |    8 
 src/glsl/ir_optimization.h                                 |    2 
 src/glsl/list.h                                            |    4 
 src/glsl/lower_instructions.cpp                            |   65 -
 src/glsl/nir/nir.c                                         |    2 
 src/glsl/nir/nir.h                                         |    5 
 src/glsl/nir/nir_algebraic.py                              |   36 
 src/glsl/nir/nir_lower_phis_to_scalar.c                    |  290 ++++++
 src/glsl/nir/nir_lower_to_source_mods.c                    |    4 
 src/glsl/nir/nir_lower_vec_to_movs.c                       |   82 +
 src/glsl/nir/nir_opcodes.py                                |    4 
 src/glsl/nir/nir_opt_algebraic.py                          |   45 
 src/glsl/nir/nir_opt_remove_phis.c                         |  109 ++
 src/glsl/nir/nir_search.c                                  |   17 
 src/glsl/nir/nir_search.h                                  |   19 
 src/glsl/nir/nir_to_ssa.c                                  |    3 
 src/glsl/nir/nir_types.cpp                                 |   14 
 src/glsl/nir/nir_types.h                                   |    3 
 src/glsl/nir/nir_validate.c                                |   21 
 src/mapi/glapi/gen/gl_API.xml                              |   11 
 src/mesa/Makefile.sources                                  |    1 
 src/mesa/drivers/common/meta.c                             |   11 
 src/mesa/drivers/common/meta.h                             |    8 
 src/mesa/drivers/common/meta_blit.c                        |   43 
 src/mesa/drivers/common/meta_copy_image.c                  |    3 
 src/mesa/drivers/common/meta_generate_mipmap.c             |    2 
 src/mesa/drivers/common/meta_tex_subimage.c                |   12 
 src/mesa/drivers/dri/common/drirc                          |    4 
 src/mesa/drivers/dri/i915/i830_texblend.c                  |    2 
 src/mesa/drivers/dri/i915/intel_fbo.c                      |   14 
 src/mesa/drivers/dri/i915/intel_syncobj.c                  |    2 
 src/mesa/drivers/dri/i965/brw_blorp_blit.cpp               |   15 
 src/mesa/drivers/dri/i965/brw_context.h                    |    5 
 src/mesa/drivers/dri/i965/brw_eu_emit.c                    |    8 
 src/mesa/drivers/dri/i965/brw_fs.cpp                       |   50 -
 src/mesa/drivers/dri/i965/brw_fs.h                         |   16 
 src/mesa/drivers/dri/i965/brw_fs_copy_propagation.cpp      |   27 
 src/mesa/drivers/dri/i965/brw_fs_generator.cpp             |   37 
 src/mesa/drivers/dri/i965/brw_fs_nir.cpp                   |  618 ++++---------
 src/mesa/drivers/dri/i965/brw_fs_reg_allocate.cpp          |   36 
 src/mesa/drivers/dri/i965/brw_fs_visitor.cpp               |    2 
 src/mesa/drivers/dri/i965/brw_meta_stencil_blit.c          |   10 
 src/mesa/drivers/dri/i965/brw_meta_util.c                  |    5 
 src/mesa/drivers/dri/i965/brw_meta_util.h                  |    2 
 src/mesa/drivers/dri/i965/brw_shader.cpp                   |   85 +
 src/mesa/drivers/dri/i965/brw_shader.h                     |    2 
 src/mesa/drivers/dri/i965/brw_vec4.cpp                     |    8 
 src/mesa/drivers/dri/i965/brw_vec4_copy_propagation.cpp    |   27 
 src/mesa/drivers/dri/i965/brw_vec4_visitor.cpp             |   22 
 src/mesa/drivers/dri/i965/brw_wm_surface_state.c           |    4 
 src/mesa/drivers/dri/i965/gen6_sf_state.c                  |    2 
 src/mesa/drivers/dri/i965/gen7_sf_state.c                  |    2 
 src/mesa/drivers/dri/i965/gen7_vs_state.c                  |    7 
 src/mesa/drivers/dri/i965/gen7_wm_surface_state.c          |    4 
 src/mesa/drivers/dri/i965/gen8_sf_state.c                  |    2 
 src/mesa/drivers/dri/i965/gen8_surface_state.c             |    3 
 src/mesa/drivers/dri/i965/intel_blit.c                     |   31 
 src/mesa/drivers/dri/i965/intel_extensions.c               |    6 
 src/mesa/drivers/dri/i965/intel_fbo.c                      |   20 
 src/mesa/drivers/dri/i965/intel_mipmap_tree.c              |   30 
 src/mesa/drivers/dri/i965/intel_pixel_read.c               |   29 
 src/mesa/drivers/dri/i965/intel_tex_image.c                |    7 
 src/mesa/drivers/dri/i965/intel_tiled_memcpy.c             |   30 
 src/mesa/drivers/dri/i965/intel_tiled_memcpy.h             |    4 
 src/mesa/drivers/dri/nouveau/.dir-locals.el                |    2 
 src/mesa/drivers/dri/nouveau/nouveau_state.c               |    2 
 src/mesa/drivers/dri/r200/r200_cmdbuf.c                    |    2 
 src/mesa/drivers/dri/r200/r200_context.c                   |    2 
 src/mesa/drivers/dri/r200/r200_ioctl.h                     |    2 
 src/mesa/drivers/dri/r200/r200_state.c                     |    2 
 src/mesa/drivers/dri/r200/r200_swtcl.c                     |    2 
 src/mesa/drivers/dri/r200/r200_tex.c                       |    2 
 src/mesa/drivers/dri/radeon/radeon_common_context.c        |    2 
 src/mesa/drivers/dri/radeon/radeon_context.c               |    2 
 src/mesa/drivers/dri/radeon/radeon_dma.c                   |    2 
 src/mesa/drivers/dri/radeon/radeon_ioctl.c                 |    2 
 src/mesa/drivers/dri/radeon/radeon_ioctl.h                 |    2 
 src/mesa/drivers/dri/radeon/radeon_mipmap_tree.c           |    2 
 src/mesa/drivers/dri/radeon/radeon_queryobj.c              |    2 
 src/mesa/drivers/dri/radeon/radeon_queryobj.h              |    2 
 src/mesa/drivers/dri/radeon/radeon_state.c                 |    4 
 src/mesa/drivers/dri/radeon/radeon_swtcl.c                 |    2 
 src/mesa/drivers/dri/radeon/radeon_tex.c                   |    2 
 src/mesa/main/attrib.c                                     |    6 
 src/mesa/main/blit.c                                       |    2 
 src/mesa/main/context.c                                    |    2 
 src/mesa/main/dd.h                                         |    4 
 src/mesa/main/dlist.c                                      |  197 ++--
 src/mesa/main/dlist.h                                      |    3 
 src/mesa/main/enable.c                                     |    2 
 src/mesa/main/extensions.c                                 |    5 
 src/mesa/main/fbobject.c                                   |    2 
 src/mesa/main/format_utils.c                               |    4 
 src/mesa/main/get.c                                        |    1 
 src/mesa/main/get_hash_params.py                           |    4 
 src/mesa/main/glformats.c                                  |   47 
 src/mesa/main/glformats.h                                  |    3 
 src/mesa/main/image.c                                      |   14 
 src/mesa/main/image.h                                      |    3 
 src/mesa/main/light.c                                      |    2 
 src/mesa/main/mtypes.h                                     |   10 
 src/mesa/main/pack.c                                       |    6 
 src/mesa/main/polygon.c                                    |   46 
 src/mesa/main/polygon.h                                    |    8 
 src/mesa/main/querymatrix.c                                |   51 +
 src/mesa/main/shader_query.cpp                             |    5 
 src/mesa/main/shaderapi.c                                  |   26 
 src/mesa/main/simple_list.h                                |  210 ----
 src/mesa/main/tests/dispatch_sanity.cpp                    |    3 
 src/mesa/main/teximage.c                                   |  368 ++++---
 src/mesa/main/texobj.c                                     |   58 +
 src/mesa/main/uniform_query.cpp                            |   17 
 src/mesa/program/ir_to_mesa.cpp                            |    4 
 src/mesa/program/prog_hash_table.c                         |    2 
 src/mesa/state_tracker/st_atom_rasterizer.c                |    1 
 src/mesa/state_tracker/st_cb_blit.c                        |    6 
 src/mesa/state_tracker/st_cb_bufferobjects.c               |   11 
 src/mesa/state_tracker/st_extensions.c                     |    1 
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp                 |    4 
 src/mesa/swrast/s_blit.c                                   |   43 
 src/mesa/swrast/s_copypix.c                                |   25 
 src/mesa/swrast/swrast.h                                   |   18 
 src/mesa/tnl/t_rasterpos.c                                 |    2 
 src/mesa/tnl/t_vb_light.c                                  |    2 
 src/mesa/tnl/t_vertex_generic.c                            |    2 
 src/mesa/tnl/t_vertex_sse.c                                |    2 
 src/mesa/vbo/vbo_save_api.c                                |    5 
 src/util/Makefile.sources                                  |    1 
 src/util/macros.h                                          |   52 -
 src/util/simple_list.h                                     |  211 ++++
 src/util/u_atomic.h                                        |   54 -
 267 files changed, 4734 insertions(+), 2521 deletions(-)

New commits:
commit 326bd7b9b1d39c9f15f538e7ae62fd16ad8e825a
Author: Maarten Lankhorst <maarten.lankhorst@ubuntu.com>
Date:   Tue Feb 10 15:43:33 2015 +0100

    New upstream snapshot.

diff --git a/debian/changelog b/debian/changelog
index b5a6596..ad8ab561f 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,8 +1,12 @@
-mesa (10.5.0~git20150113-0ubuntu1) UNRELEASED; urgency=medium
+mesa (10.5.0~git20150210-0ubuntu1) UNRELEASED; urgency=medium
 
+  [ Timo Aaltonen ]
   * New upstream snapshot
   * Update Mir patch.
 
+  [ Maarten Lankhorst ]
+  * New upstream snapshot.
+
  -- Timo Aaltonen <tjaalton@debian.org>  Tue, 13 Jan 2015 15:56:02 +0200
 
 mesa (10.4.2-2ubuntu3) vivid; urgency=medium
diff --git a/debian/patches/i915-fix-gen4-hangs.patch b/debian/patches/i915-fix-gen4-hangs.patch
deleted file mode 100644
index 34e8a5c..0000000
--- a/debian/patches/i915-fix-gen4-hangs.patch
+++ /dev/null
@@ -1,59 +0,0 @@
-commit 882f702441c6601589bdef805a9157cb113b91dd
-Author: Kenneth Graunke <kenneth@whitecape.org>
-Date:   Sat Jan 17 23:21:15 2015 -0800
-
-    i965: Work around mysterious Gen4 GPU hangs with minimal state changes.
-    
-    Gen4 hardware appears to GPU hang frequently when using Chromium, and
-    also when running 'glmark2 -b ideas'.  Most of the error states contain
-    3DPRIMITIVE commands in quick succession, with very few state packets
-    between them - usually VERTEX_BUFFERS/ELEMENTS and CONSTANT_BUFFER.
-    
-    I trimmed an apitrace of the glmark2 hang down to two draw calls with a
-    glUniformMatrix4fv call between the two.  Either draw by itself works
-    fine, but together, they hang the GPU.  Removing the glUniform call
-    makes the hangs disappear.  In the hardware state, this translates to
-    removing the CONSTANT_BUFFER packet between the two 3DPRIMITIVE packets.
-    
-    Flushing before emitting CONSTANT_BUFFER packets also appears to make
-    the hangs disappear.  I observed a slowdown in glxgears by doing it all
-    the time, so I've chosen to only do it when BRW_NEW_BATCH and
-    BRW_NEW_PSP are unset (i.e. we haven't done a CS_URB_STATE change or
-    already flushed the whole pipeline).
-    
-    I'd much rather understand the problem, but at this point, I don't see
-    how we'd ever be able to track it down further.  We have no real tools,
-    and the hardware people moved on years ago.  I've analyzed 20+ error
-    states and read every scrap of documentation I could find.
-    
-    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=80568
-    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=85367
-    Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
-    Acked-by: Matt Turner <mattst88@gmail.com>
-    Cc: "10.4 10.3" <mesa-stable@lists.freedesktop.org>
-    (cherry picked from commit c4fd0c9052dd391d6f2e9bb8e6da209dfc7ef35b)
-
-diff --git a/src/mesa/drivers/dri/i965/brw_curbe.c b/src/mesa/drivers/dri/i965/brw_curbe.c
-index 1a828ed..718d87c 100644
---- a/src/mesa/drivers/dri/i965/brw_curbe.c
-+++ b/src/mesa/drivers/dri/i965/brw_curbe.c
-@@ -280,6 +280,19 @@ brw_upload_constant_buffer(struct brw_context *brw)
-     */
- 
- emit:
-+   /* Work around mysterious 965 hangs that appear to happen if you do
-+    * two 3DPRIMITIVEs with only a CONSTANT_BUFFER inbetween.  If we
-+    * haven't already flushed for some other reason, explicitly do so.
-+    *
-+    * We've found no documented reason why this should be necessary.
-+    */
-+   if (brw->gen == 4 && !brw->is_g4x &&
-+       (brw->state.dirty.brw & (BRW_NEW_BATCH | BRW_NEW_PSP)) == 0) {
-+      BEGIN_BATCH(1);
-+      OUT_BATCH(MI_FLUSH);
-+      ADVANCE_BATCH();
-+   }
-+
-    /* BRW_NEW_URB_FENCE: From the gen4 PRM, volume 1, section 3.9.8
-     * (CONSTANT_BUFFER (CURBE Load)):
-     *
diff --git a/debian/patches/llvm-3.6-fixes.patch b/debian/patches/llvm-3.6-fixes.patch
deleted file mode 100644
index e518f51..0000000
--- a/debian/patches/llvm-3.6-fixes.patch
+++ /dev/null
@@ -1,616 +0,0 @@
-diff --git a/src/gallium/auxiliary/draw/draw_llvm.c b/src/gallium/auxiliary/draw/draw_llvm.c
-index 14c802b..869abb0 100644
---- a/src/gallium/auxiliary/draw/draw_llvm.c
-+++ b/src/gallium/auxiliary/draw/draw_llvm.c
-@@ -742,6 +742,7 @@ generate_fetch(struct gallivm_state *gallivm,
-       val = lp_build_fetch_rgba_aos(gallivm,
-                                     format_desc,
-                                     lp_float32_vec4_type(),
-+                                    FALSE,
-                                     map_ptr,
-                                     zero, zero, zero);
-       LLVMBuildStore(builder, val, temp_ptr);
-diff --git a/src/gallium/auxiliary/gallivm/lp_bld_format.h b/src/gallium/auxiliary/gallivm/lp_bld_format.h
-index 1177fb2..969f1f6 100644
---- a/src/gallium/auxiliary/gallivm/lp_bld_format.h
-+++ b/src/gallium/auxiliary/gallivm/lp_bld_format.h
-@@ -62,6 +62,7 @@ LLVMValueRef
- lp_build_fetch_rgba_aos(struct gallivm_state *gallivm,
-                         const struct util_format_description *format_desc,
-                         struct lp_type type,
-+                        boolean aligned,
-                         LLVMValueRef base_ptr,
-                         LLVMValueRef offset,
-                         LLVMValueRef i,
-diff --git a/src/gallium/auxiliary/gallivm/lp_bld_format_aos.c b/src/gallium/auxiliary/gallivm/lp_bld_format_aos.c
-index af755d4..3c25c32 100644
---- a/src/gallium/auxiliary/gallivm/lp_bld_format_aos.c
-+++ b/src/gallium/auxiliary/gallivm/lp_bld_format_aos.c
-@@ -356,6 +356,7 @@ lp_build_pack_rgba_aos(struct gallivm_state *gallivm,
-  * Fetch a pixel into a 4 float AoS.
-  *
-  * \param format_desc  describes format of the image we're fetching from
-+ * \param aligned  whether the data is guaranteed to be aligned
-  * \param ptr  address of the pixel block (or the texel if uncompressed)
-  * \param i, j  the sub-block pixel coordinates.  For non-compressed formats
-  *              these will always be (0, 0).
-@@ -365,6 +366,7 @@ LLVMValueRef
- lp_build_fetch_rgba_aos(struct gallivm_state *gallivm,
-                         const struct util_format_description *format_desc,
-                         struct lp_type type,
-+                        boolean aligned,
-                         LLVMValueRef base_ptr,
-                         LLVMValueRef offset,
-                         LLVMValueRef i,
-@@ -400,7 +402,7 @@ lp_build_fetch_rgba_aos(struct gallivm_state *gallivm,
- 
-       packed = lp_build_gather(gallivm, type.length/4,
-                                format_desc->block.bits, type.width*4,
--                               base_ptr, offset, TRUE);
-+                               aligned, base_ptr, offset, TRUE);
- 
-       assert(format_desc->block.bits <= vec_len);
- 
-@@ -437,7 +439,7 @@ lp_build_fetch_rgba_aos(struct gallivm_state *gallivm,
-          LLVMValueRef packed;
- 
-          packed = lp_build_gather_elem(gallivm, num_pixels,
--                                       format_desc->block.bits, 32,
-+                                       format_desc->block.bits, 32, aligned,
-                                        base_ptr, offset, k, FALSE);
- 
-          tmps[k] = lp_build_unpack_arith_rgba_aos(gallivm,
-diff --git a/src/gallium/auxiliary/gallivm/lp_bld_format_soa.c b/src/gallium/auxiliary/gallivm/lp_bld_format_soa.c
-index ff2887e..afaabc0 100644
---- a/src/gallium/auxiliary/gallivm/lp_bld_format_soa.c
-+++ b/src/gallium/auxiliary/gallivm/lp_bld_format_soa.c
-@@ -386,6 +386,7 @@ lp_build_fetch_rgba_soa(struct gallivm_state *gallivm,
-                                type.length,
-                                format_desc->block.bits,
-                                type.width,
-+                               TRUE,
-                                base_ptr, offset, FALSE);
- 
-       /*
-@@ -411,8 +412,8 @@ lp_build_fetch_rgba_soa(struct gallivm_state *gallivm,
- 
-       packed = lp_build_gather(gallivm, type.length,
-                                format_desc->block.bits,
--                               type.width, base_ptr, offset,
--                               FALSE);
-+                               type.width, TRUE,
-+                               base_ptr, offset, FALSE);
-       if (format_desc->format == PIPE_FORMAT_R11G11B10_FLOAT) {
-          lp_build_r11g11b10_to_float(gallivm, packed, rgba_out);
-       }
-@@ -438,15 +439,15 @@ lp_build_fetch_rgba_soa(struct gallivm_state *gallivm,
-          unsigned mask = (1 << 8) - 1;
-          LLVMValueRef s_offset = lp_build_const_int_vec(gallivm, type, 4);
-          offset = LLVMBuildAdd(builder, offset, s_offset, "");
--         packed = lp_build_gather(gallivm, type.length,
--                                  32, type.width, base_ptr, offset, FALSE);
-+         packed = lp_build_gather(gallivm, type.length, 32, type.width,
-+                                  TRUE, base_ptr, offset, FALSE);
-          packed = LLVMBuildAnd(builder, packed,
-                                lp_build_const_int_vec(gallivm, type, mask), "");
-       }
-       else {
-          assert (format_desc->format == PIPE_FORMAT_Z32_FLOAT_S8X24_UINT);
--         packed = lp_build_gather(gallivm, type.length,
--                                  32, type.width, base_ptr, offset, TRUE);
-+         packed = lp_build_gather(gallivm, type.length, 32, type.width,
-+                                  TRUE, base_ptr, offset, TRUE);
-          packed = LLVMBuildBitCast(builder, packed,
-                                    lp_build_vec_type(gallivm, type), "");
-       }
-@@ -472,7 +473,7 @@ lp_build_fetch_rgba_soa(struct gallivm_state *gallivm,
-       tmp_type.norm = TRUE;
- 
-       tmp = lp_build_fetch_rgba_aos(gallivm, format_desc, tmp_type,
--                                    base_ptr, offset, i, j);
-+                                    TRUE, base_ptr, offset, i, j);
- 
-       lp_build_rgba8_to_fi32_soa(gallivm,
-                                 type,
-@@ -522,7 +523,7 @@ lp_build_fetch_rgba_soa(struct gallivm_state *gallivm,
- 
-          /* Get a single float[4]={R,G,B,A} pixel */
-          tmp = lp_build_fetch_rgba_aos(gallivm, format_desc, tmp_type,
--                                       base_ptr, offset_elem,
-+                                       TRUE, base_ptr, offset_elem,
-                                        i_elem, j_elem);
- 
-          /*
-diff --git a/src/gallium/auxiliary/gallivm/lp_bld_format_yuv.c b/src/gallium/auxiliary/gallivm/lp_bld_format_yuv.c
-index 873f354..4f5a45c 100644
---- a/src/gallium/auxiliary/gallivm/lp_bld_format_yuv.c
-+++ b/src/gallium/auxiliary/gallivm/lp_bld_format_yuv.c
-@@ -497,7 +497,7 @@ lp_build_fetch_subsampled_rgba_aos(struct gallivm_state *gallivm,
-    assert(format_desc->block.width == 2);
-    assert(format_desc->block.height == 1);
- 
--   packed = lp_build_gather(gallivm, n, 32, 32, base_ptr, offset, FALSE);
-+   packed = lp_build_gather(gallivm, n, 32, 32, TRUE, base_ptr, offset, FALSE);
- 
-    (void)j;
- 
-diff --git a/src/gallium/auxiliary/gallivm/lp_bld_gather.c b/src/gallium/auxiliary/gallivm/lp_bld_gather.c
-index 9155d81..d026020 100644
---- a/src/gallium/auxiliary/gallivm/lp_bld_gather.c
-+++ b/src/gallium/auxiliary/gallivm/lp_bld_gather.c
-@@ -76,6 +76,7 @@ lp_build_gather_elem(struct gallivm_state *gallivm,
-                      unsigned length,
-                      unsigned src_width,
-                      unsigned dst_width,
-+                     boolean aligned,
-                      LLVMValueRef base_ptr,
-                      LLVMValueRef offsets,
-                      unsigned i,
-@@ -93,6 +94,27 @@ lp_build_gather_elem(struct gallivm_state *gallivm,
-    ptr = LLVMBuildBitCast(gallivm->builder, ptr, src_ptr_type, "");
-    res = LLVMBuildLoad(gallivm->builder, ptr, "");
- 
-+   /* XXX
-+    * On some archs we probably really want to avoid having to deal
-+    * with alignments lower than 4 bytes (if fetch size is a power of
-+    * two >= 32). On x86 it doesn't matter, however.
-+    * We should be able to guarantee full alignment for any kind of texture
-+    * fetch (except ARB_texture_buffer_range, oops), but not vertex fetch
-+    * (there's PIPE_CAP_VERTEX_BUFFER_OFFSET_4BYTE_ALIGNED_ONLY and friends
-+    * but I don't think that's quite what we wanted).
-+    * For ARB_texture_buffer_range, PIPE_CAP_TEXTURE_BUFFER_OFFSET_ALIGNMENT
-+    * looks like a good fit, but it seems this cap bit (and OpenGL) aren't
-+    * enforcing what we want (which is what d3d10 does, the offset needs to
-+    * be aligned to element size, but GL has bytes regardless of element
-+    * size which would only leave us with minimum alignment restriction of 16
-+    * which doesn't make much sense if the type isn't 4x32bit). Due to
-+    * translation of offsets to first_elem in sampler_views it actually seems
-+    * gallium could not do anything else except 16 no matter what...
-+    */
-+  if (!aligned) {
-+      lp_set_load_alignment(res, 1);
-+   }
-+
-    assert(src_width <= dst_width);
-    if (src_width > dst_width) {
-       res = LLVMBuildTrunc(gallivm->builder, res, dst_elem_type, "");
-@@ -126,6 +148,7 @@ lp_build_gather_elem(struct gallivm_state *gallivm,
-  * @param length length of the offsets
-  * @param src_width src element width in bits
-  * @param dst_width result element width in bits (src will be expanded to fit)
-+ * @param aligned whether the data is guaranteed to be aligned (to src_width)
-  * @param base_ptr base pointer, should be a i8 pointer type.
-  * @param offsets vector with offsets
-  * @param vector_justify select vector rather than integer justification
-@@ -135,6 +158,7 @@ lp_build_gather(struct gallivm_state *gallivm,
-                 unsigned length,
-                 unsigned src_width,
-                 unsigned dst_width,
-+                boolean aligned,
-                 LLVMValueRef base_ptr,
-                 LLVMValueRef offsets,
-                 boolean vector_justify)
-@@ -144,7 +168,7 @@ lp_build_gather(struct gallivm_state *gallivm,
-    if (length == 1) {
-       /* Scalar */
-       return lp_build_gather_elem(gallivm, length,
--                                  src_width, dst_width,
-+                                  src_width, dst_width, aligned,
-                                   base_ptr, offsets, 0, vector_justify);
-    } else {
-       /* Vector */
-@@ -158,7 +182,7 @@ lp_build_gather(struct gallivm_state *gallivm,
-          LLVMValueRef index = lp_build_const_int32(gallivm, i);
-          LLVMValueRef elem;
-          elem = lp_build_gather_elem(gallivm, length,
--                                     src_width, dst_width,
-+                                     src_width, dst_width, aligned,
-                                      base_ptr, offsets, i, vector_justify);
-          res = LLVMBuildInsertElement(gallivm->builder, res, elem, index, "");
-       }
-diff --git a/src/gallium/auxiliary/gallivm/lp_bld_gather.h b/src/gallium/auxiliary/gallivm/lp_bld_gather.h
-index ee69473..3ede476 100644
---- a/src/gallium/auxiliary/gallivm/lp_bld_gather.h
-+++ b/src/gallium/auxiliary/gallivm/lp_bld_gather.h
-@@ -45,6 +45,7 @@ lp_build_gather_elem(struct gallivm_state *gallivm,
-                      unsigned length,
-                      unsigned src_width,
-                      unsigned dst_width,
-+                     boolean aligned,
-                      LLVMValueRef base_ptr,
-                      LLVMValueRef offsets,
-                      unsigned i,
-@@ -55,6 +56,7 @@ lp_build_gather(struct gallivm_state *gallivm,
-                 unsigned length,
-                 unsigned src_width,
-                 unsigned dst_width,
-+                boolean aligned,
-                 LLVMValueRef base_ptr,
-                 LLVMValueRef offsets,
-                 boolean vector_justify);
-diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
-index fe3c754..5210acc 100644
---- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
-+++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
-@@ -500,8 +500,12 @@ lp_build_create_jit_compiler_for_module(LLVMExecutionEngineRef *OutJIT,
-        MM = new ShaderMemoryManager(JMM);
-        *OutCode = MM->getGeneratedCode();
- 
-+#if HAVE_LLVM >= 0x0306
-+       builder.setMCJITMemoryManager(std::unique_ptr<RTDyldMemoryManager>(MM));
-+#else
-        builder.setMCJITMemoryManager(MM);
- #endif
-+#endif
-    } else {
- #if HAVE_LLVM < 0x0306
-        BaseMemoryManager* JMM = reinterpret_cast<BaseMemoryManager*>(CMM);
-diff --git a/src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c b/src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c
-index 394521d..d7fde81 100644
---- a/src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c
-+++ b/src/gallium/auxiliary/gallivm/lp_bld_sample_aos.c
-@@ -581,6 +581,7 @@ lp_build_sample_fetch_image_nearest(struct lp_build_sample_context *bld,
-                               bld->texel_type.length,
-                               bld->format_desc->block.bits,
-                               bld->texel_type.width,
-+                              TRUE,
-                               data_ptr, offset, TRUE);
- 
-       rgba8 = LLVMBuildBitCast(builder, rgba8, u8n_vec_type, "");
-@@ -589,6 +590,7 @@ lp_build_sample_fetch_image_nearest(struct lp_build_sample_context *bld,
-       rgba8 = lp_build_fetch_rgba_aos(bld->gallivm,
-                                       bld->format_desc,
-                                       u8n.type,
-+                                      TRUE,
-                                       data_ptr, offset,
-                                       x_subcoord,
-                                       y_subcoord);
-@@ -919,6 +921,7 @@ lp_build_sample_fetch_image_linear(struct lp_build_sample_context *bld,
-                                        bld->texel_type.length,
-                                        bld->format_desc->block.bits,
-                                        bld->texel_type.width,
-+                                       TRUE,
-                                        data_ptr, offset[k][j][i], TRUE);
- 
-                rgba8 = LLVMBuildBitCast(builder, rgba8, u8n_vec_type, "");
-@@ -927,6 +930,7 @@ lp_build_sample_fetch_image_linear(struct lp_build_sample_context *bld,
-                rgba8 = lp_build_fetch_rgba_aos(bld->gallivm,
-                                                bld->format_desc,
-                                                u8n.type,
-+                                               TRUE,
-                                                data_ptr, offset[k][j][i],
-                                                x_subcoord[i],
-                                                y_subcoord[j]);
-diff --git a/src/gallium/drivers/llvmpipe/lp_test_format.c b/src/gallium/drivers/llvmpipe/lp_test_format.c
-index 48bf06e..d9abd1a 100644
---- a/src/gallium/drivers/llvmpipe/lp_test_format.c
-+++ b/src/gallium/drivers/llvmpipe/lp_test_format.c
-@@ -112,7 +112,7 @@ add_fetch_rgba_test(struct gallivm_state *gallivm, unsigned verbose,
-    block = LLVMAppendBasicBlockInContext(context, func, "entry");
-    LLVMPositionBuilderAtEnd(builder, block);
- 
--   rgba = lp_build_fetch_rgba_aos(gallivm, desc, type,
-+   rgba = lp_build_fetch_rgba_aos(gallivm, desc, type, TRUE,
-                                   packed_ptr, offset, i, j);
- 
-    LLVMBuildStore(builder, rgba, rgba_ptr);
-@@ -252,6 +252,7 @@ test_format_unorm8(unsigned verbose, FILE *fp,
-          }
- 
-          /* To ensure it's 16-byte aligned */
-+         /* Could skip this and use unaligned lp_build_fetch_rgba_aos */
-          memcpy(packed, test->packed, sizeof packed);
- 
-          for (i = 0; i < desc->block.height; ++i) {
-diff --git a/src/gallium/drivers/r600/r600_llvm.c b/src/gallium/drivers/r600/r600_llvm.c
-index e8cae00..bca934e 100644
---- a/src/gallium/drivers/r600/r600_llvm.c
-+++ b/src/gallium/drivers/r600/r600_llvm.c
-@@ -881,7 +881,7 @@ unsigned r600_llvm_compile(
- 	const char * gpu_family = r600_get_llvm_processor_name(family);
- 
- 	memset(&binary, 0, sizeof(struct radeon_shader_binary));
--	r = radeon_llvm_compile(mod, &binary, gpu_family, dump);
-+	r = radeon_llvm_compile(mod, &binary, gpu_family, dump, NULL);
- 
- 	r = r600_create_shader(bc, &binary, use_kill);
- 
-diff --git a/src/gallium/drivers/radeon/r600_pipe_common.c b/src/gallium/drivers/radeon/r600_pipe_common.c
-index f9393e6..b349123 100644
---- a/src/gallium/drivers/radeon/r600_pipe_common.c
-+++ b/src/gallium/drivers/radeon/r600_pipe_common.c
-@@ -36,6 +36,10 @@
- #include "radeon/radeon_video.h"
- #include <inttypes.h>
- 
-+#ifndef HAVE_LLVM
-+#define HAVE_LLVM 0
-+#endif
-+
- /*
-  * pipe_context
-  */
-@@ -501,6 +505,12 @@ static int r600_get_compute_param(struct pipe_screen *screen,
- 	switch (param) {
- 	case PIPE_COMPUTE_CAP_IR_TARGET: {
- 		const char *gpu;
-+		const char *triple;
-+		if (rscreen->family <= CHIP_ARUBA || HAVE_LLVM < 0x0306) {
-+			triple = "r600--";
-+		} else {
-+			triple = "amdgcn--";
-+		}
- 		switch(rscreen->family) {
- 		/* Clang < 3.6 is missing Hainan in its list of
- 		 * GPUs, so we need to use the name of a similar GPU.
-@@ -515,9 +525,10 @@ static int r600_get_compute_param(struct pipe_screen *screen,
- 			break;
- 		}
- 		if (ret) {
--			sprintf(ret, "%s-r600--", gpu);
-+			sprintf(ret, "%s-%s", gpu, triple);
-+
- 		}
--		return (8 + strlen(gpu)) * sizeof(char);
-+		return (strlen(triple) + strlen(gpu)) * sizeof(char);
- 	}
- 	case PIPE_COMPUTE_CAP_GRID_DIMENSION:
- 		if (ret) {
-diff --git a/src/gallium/drivers/radeon/radeon_llvm_emit.c b/src/gallium/drivers/radeon/radeon_llvm_emit.c
-index dc871d7..b98afb2 100644
---- a/src/gallium/drivers/radeon/radeon_llvm_emit.c
-+++ b/src/gallium/drivers/radeon/radeon_llvm_emit.c
-@@ -98,19 +98,19 @@ static void init_r600_target()
- 	}
- }
- 
--static LLVMTargetRef get_r600_target()
-+LLVMTargetRef radeon_llvm_get_r600_target(const char *triple)
- {
- 	LLVMTargetRef target = NULL;
-+	char *err_message = NULL;
- 
--	for (target = LLVMGetFirstTarget(); target;
--					target = LLVMGetNextTarget(target)) {
--		if (!strncmp(LLVMGetTargetName(target), "r600", 4)) {
--			break;
--		}
--	}
-+	init_r600_target();
- 
--	if (!target) {
--		fprintf(stderr, "Can't find target r600\n");
-+	if (LLVMGetTargetFromTriple(triple, &target, &err_message)) {
-+		fprintf(stderr, "Cannot find target for triple %s ", triple);
-+		if (err_message) {
-+			fprintf(stderr, "%s\n", err_message);
-+		}
-+		LLVMDisposeMessage(err_message);
- 		return NULL;
- 	}
- 	return target;
-@@ -138,14 +138,13 @@ static void radeonDiagnosticHandler(LLVMDiagnosticInfoRef di, void *context)
-  * @returns 0 for success, 1 for failure
-  */
- unsigned radeon_llvm_compile(LLVMModuleRef M, struct radeon_shader_binary *binary,
--					  const char *gpu_family, unsigned dump)
-+			  const char *gpu_family, unsigned dump, LLVMTargetMachineRef tm)
- {
- 
--	LLVMTargetRef target;
--	LLVMTargetMachineRef tm;
- 	char cpu[CPU_STRING_LEN];
- 	char fs[FS_STRING_LEN];
- 	char *err;
-+	bool dispose_tm = false;
- 	LLVMContextRef llvm_ctx;
- 	unsigned rval = 0;
- 	LLVMMemoryBufferRef out_buffer;
-@@ -154,22 +153,23 @@ unsigned radeon_llvm_compile(LLVMModuleRef M, struct radeon_shader_binary *binar
- 	char triple[TRIPLE_STRING_LEN];
- 	LLVMBool mem_err;
- 
--	/* initialise */
--	init_r600_target();
--
--	target = get_r600_target();
--	if (!target) {
--		return 1;
--	}
--
--	strncpy(cpu, gpu_family, CPU_STRING_LEN);
--	memset(fs, 0, sizeof(fs));
--	if (dump) {
--		LLVMDumpModule(M);
--		strncpy(fs, "+DumpCode", FS_STRING_LEN);
-+	if (!tm) {
-+		strncpy(triple, "r600--", TRIPLE_STRING_LEN);
-+		LLVMTargetRef target = radeon_llvm_get_r600_target(triple);
-+		if (!target) {
-+			return 1;
-+		}
-+		strncpy(cpu, gpu_family, CPU_STRING_LEN);
-+		memset(fs, 0, sizeof(fs));
-+		if (dump) {
-+			LLVMDumpModule(M);
-+			strncpy(fs, "+DumpCode", FS_STRING_LEN);
-+		}
-+		tm = LLVMCreateTargetMachine(target, triple, cpu, fs,
-+				  LLVMCodeGenLevelDefault, LLVMRelocDefault,
-+						  LLVMCodeModelDefault);
-+		dispose_tm = true;
- 	}
--	strncpy(triple, "r600--", TRIPLE_STRING_LEN);
--
- 	/* Setup Diagnostic Handler*/
- 	llvm_ctx = LLVMGetModuleContext(M);
- 
-@@ -179,9 +179,6 @@ unsigned radeon_llvm_compile(LLVMModuleRef M, struct radeon_shader_binary *binar
- 	rval = 0;
- 
- 	/* Compile IR*/
--	tm = LLVMCreateTargetMachine(target, triple, cpu, fs,
--				  LLVMCodeGenLevelDefault, LLVMRelocDefault,
--						  LLVMCodeModelDefault);
- 	mem_err = LLVMTargetMachineEmitToMemoryBuffer(tm, M, LLVMObjectFile, &err,
- 								 &out_buffer);
- 
-@@ -205,6 +202,9 @@ unsigned radeon_llvm_compile(LLVMModuleRef M, struct radeon_shader_binary *binar
- 
- 	/* Clean up */
- 	LLVMDisposeMemoryBuffer(out_buffer);
--	LLVMDisposeTargetMachine(tm);
-+
-+	if (dispose_tm) {
-+		LLVMDisposeTargetMachine(tm);
-+	}
- 	return rval;
- }
-diff --git a/src/gallium/drivers/radeon/radeon_llvm_emit.h b/src/gallium/drivers/radeon/radeon_llvm_emit.h
-index 780ff5f..3ccef78 100644
---- a/src/gallium/drivers/radeon/radeon_llvm_emit.h
-+++ b/src/gallium/drivers/radeon/radeon_llvm_emit.h
-@@ -28,15 +28,19 @@
- #define RADEON_LLVM_EMIT_H
- 
- #include <llvm-c/Core.h>
-+#include <llvm-c/TargetMachine.h>
- 
- struct radeon_shader_binary;
- 
- void radeon_llvm_shader_type(LLVMValueRef F, unsigned type);
- 
-+LLVMTargetRef radeon_llvm_get_r600_target(const char *triple);
-+
- unsigned  radeon_llvm_compile(
- 	LLVMModuleRef M,
- 	struct radeon_shader_binary *binary,
- 	const char * gpu_family,
--	unsigned dump);
-+	unsigned dump,
-+	LLVMTargetMachineRef tm);
- 
- #endif /* RADEON_LLVM_EMIT_H */
-diff --git a/src/gallium/drivers/radeonsi/si_pipe.c b/src/gallium/drivers/radeonsi/si_pipe.c
-index 53c83ba..f99bf76 100644
---- a/src/gallium/drivers/radeonsi/si_pipe.c
-+++ b/src/gallium/drivers/radeonsi/si_pipe.c
-@@ -25,10 +25,14 @@
- #include "si_public.h"
- #include "sid.h"
- 
-+#include "radeon/radeon_llvm_emit.h"
- #include "radeon/radeon_uvd.h"
- #include "util/u_memory.h"
- #include "vl/vl_decoder.h"
- 
-+#include <llvm-c/Target.h>
-+#include <llvm-c/TargetMachine.h>
-+
- /*
-  * pipe_context
-  */
-@@ -417,6 +421,12 @@ static void si_destroy_screen(struct pipe_screen* pscreen)
- 	if (!sscreen->b.ws->unref(sscreen->b.ws))
- 		return;
- 
-+#if HAVE_LLVM >= 0x0306
-+	// r600_destroy_common_screen() frees sscreen, so we need to make
-+	// sure to dispose the TargetMachine before we call it.
-+	LLVMDisposeTargetMachine(sscreen->tm);
-+#endif
-+
- 	r600_destroy_common_screen(&sscreen->b);
- }
- 
-@@ -474,6 +484,12 @@ static bool si_initialize_pipe_config(struct si_screen *sscreen)
- struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws)
- {
- 	struct si_screen *sscreen = CALLOC_STRUCT(si_screen);
-+	LLVMTargetRef r600_target;
-+#if HAVE_LLVM >= 0x0306
-+	const char *triple = "amdgcn--";
-+#else
-+	const char *triple = "r600--";
-+#endif
- 	if (sscreen == NULL) {
- 		return NULL;
- 	}
-@@ -501,5 +517,13 @@ struct pipe_screen *radeonsi_screen_create(struct radeon_winsys *ws)
- 	/* Create the auxiliary context. This must be done last. */
- 	sscreen->b.aux_context = sscreen->b.b.context_create(&sscreen->b.b, NULL);
- 
-+#if HAVE_LLVM >= 0x0306
-+	/* Initialize LLVM TargetMachine */
-+	r600_target = radeon_llvm_get_r600_target(triple);
-+	sscreen->tm = LLVMCreateTargetMachine(r600_target, triple,
-+				r600_get_llvm_processor_name(sscreen->b.family),
-+				"+DumpCode", LLVMCodeGenLevelDefault, LLVMRelocDefault,
-+				LLVMCodeModelDefault);
-+#endif
- 	return &sscreen->b.b;
- }
-diff --git a/src/gallium/drivers/radeonsi/si_pipe.h b/src/gallium/drivers/radeonsi/si_pipe.h
-index 5f5404d..597949d 100644
---- a/src/gallium/drivers/radeonsi/si_pipe.h
-+++ b/src/gallium/drivers/radeonsi/si_pipe.h
-@@ -28,6 +28,8 @@
- 
- #include "si_state.h"
- 
-+#include <llvm-c/TargetMachine.h>
-+
- #ifdef PIPE_ARCH_BIG_ENDIAN
- #define SI_BIG_ENDIAN 1
- #else
-@@ -43,6 +45,7 @@ struct si_compute;
- 
- struct si_screen {
- 	struct r600_common_screen	b;
-+	LLVMTargetMachineRef		tm;
- };
- 
- struct si_sampler_view {
-diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c
-index 541e733..afc6aad 100644
---- a/src/gallium/drivers/radeonsi/si_shader.c
-+++ b/src/gallium/drivers/radeonsi/si_shader.c
-@@ -2602,7 +2602,7 @@ int si_compile_llvm(struct si_screen *sscreen, struct si_shader *shader,
- 			shader->selector ? shader->selector->tokens : NULL);
- 	memset(&binary, 0, sizeof(binary));
- 	r = radeon_llvm_compile(mod, &binary,
--		r600_get_llvm_processor_name(sscreen->b.family), dump);
-+		r600_get_llvm_processor_name(sscreen->b.family), dump, sscreen->tm);
- 
- 	if (r) {
- 		return r;
-@@ -2740,6 +2740,13 @@ int si_shader_create(struct si_screen *sscreen, struct si_shader *shader)
- 	bld_base->op_actions[TGSI_OPCODE_EMIT].emit = si_llvm_emit_vertex;
- 	bld_base->op_actions[TGSI_OPCODE_ENDPRIM].emit = si_llvm_emit_primitive;
- 
-+	if (HAVE_LLVM >= 0x0306) {
-+		bld_base->op_actions[TGSI_OPCODE_MAX].emit = build_tgsi_intrinsic_nomem;
-+		bld_base->op_actions[TGSI_OPCODE_MAX].intr_name = "llvm.maxnum.f32";
-+		bld_base->op_actions[TGSI_OPCODE_MIN].emit = build_tgsi_intrinsic_nomem;
-+		bld_base->op_actions[TGSI_OPCODE_MIN].intr_name = "llvm.minnum.f32";
-+	}
-+
- 	si_shader_ctx.radeon_bld.load_system_value = declare_system_value;
- 	si_shader_ctx.tokens = sel->tokens;
- 	tgsi_parse_init(&si_shader_ctx.parse, si_shader_ctx.tokens);
-diff --git a/src/gallium/state_trackers/clover/llvm/invocation.cpp b/src/gallium/state_trackers/clover/llvm/invocation.cpp
-index e953822..f2b6f59 100644
---- a/src/gallium/state_trackers/clover/llvm/invocation.cpp
-+++ b/src/gallium/state_trackers/clover/llvm/invocation.cpp
-@@ -281,7 +281,11 @@ namespace {
-       }
- 
-       for (unsigned i = 0; i < kernel_node->getNumOperands(); ++i) {
-+#if HAVE_LLVM >= 0x0306
-+         kernels.push_back(llvm::mdconst::dyn_extract<llvm::Function>(
-+#else
-          kernels.push_back(llvm::dyn_cast<llvm::Function>(
-+#endif
-                                     kernel_node->getOperand(i)->getOperand(0)));
-       }
-    }
diff --git a/debian/patches/series b/debian/patches/series
index 09cb9c0..af4c631 100644
--- a/debian/patches/series
+++ b/debian/patches/series
@@ -3,5 +3,3 @@
 # Ubuntu patches.
 egl-platform-mir.patch
 i915-dont-default-to-2.1.patch
-i915-fix-gen4-hangs.patch
-llvm-3.6-fixes.patch

commit d1e21325cf3c394f5fb28808a113826ea3b7f54b
Author: Brian Paul <brianp@vmware.com>
Date:   Wed Feb 4 13:44:48 2015 -0700

    gallium/hud: also try R8_UNORM format for font texture
    
    Convert the code to try formats from an array rather than a bunch
    of if/else cases.


Reply to: