VERSION                                              |    2 
 docs/relnotes/11.0.2.html                            |    3 
 docs/relnotes/11.0.3.html                            |  184 +++++++++++++++++++
 src/egl/drivers/dri2/egl_dri2.c                      |   11 -
 src/egl/main/eglcontext.c                            |   49 ++++-
 src/gallium/auxiliary/gallivm/lp_bld_misc.cpp        |   37 +++
 src/gallium/auxiliary/gallivm/lp_bld_misc.h          |    2 
 src/gallium/auxiliary/util/u_blitter.c               |    6 
 src/gallium/drivers/nouveau/nouveau_buffer.c         |   12 -
 src/gallium/drivers/nouveau/nouveau_fence.c          |    8 
 src/gallium/drivers/nouveau/nouveau_fence.h          |    3 
 src/gallium/drivers/nouveau/nv30/nv30_format.c       |   24 +-
 src/gallium/drivers/nouveau/nv30/nv30_miptree.c      |    9 
 src/gallium/drivers/nouveau/nv30/nv30_vbo.c          |    4 
 src/gallium/drivers/nouveau/nv50/nv50_miptree.c      |    5 
 src/gallium/drivers/nouveau/nv50/nv50_transfer.c     |    7 
 src/gallium/drivers/nouveau/nvc0/nvc0_transfer.c     |    7 
 src/gallium/drivers/radeon/r600_buffer_common.c      |    7 
 src/gallium/drivers/radeon/r600_pipe_common.c        |    3 
 src/gallium/drivers/radeon/r600_texture.c            |    5 
 src/gallium/drivers/radeon/radeon_llvm_emit.c        |   27 +-
 src/gallium/drivers/radeon/radeon_vce_40_2_2.c       |    3 
 src/gallium/drivers/radeonsi/si_descriptors.c        |    8 
 src/gallium/drivers/radeonsi/si_pipe.c               |    2 
 src/gallium/drivers/radeonsi/si_shader.c             |    5 
 src/gallium/drivers/radeonsi/si_state.h              |    2 
 src/gallium/drivers/radeonsi/si_state_draw.c         |   10 -
 src/gallium/drivers/radeonsi/si_state_shaders.c      |  173 +++++++++++++----
 src/gallium/state_trackers/dri/dri2.c                |   33 +--
 src/gallium/state_trackers/dri/dri_drawable.c        |    8 
 src/gallium/targets/opencl/Makefile.am               |    3 
 src/glx/Makefile.am                                  |    1 
 src/glx/dri_common.c                                 |    6 
 src/glx/glxcmds.c                                    |    4 
 src/glx/glxextensions.h                              |   10 -
 src/mapi/mapi_glapi.c                                |    2 
 src/mesa/drivers/common/meta_blit.c                  |   35 ++-
 src/mesa/drivers/dri/i915/i830_context.h             |    8 
 src/mesa/drivers/dri/i915/i915_context.h             |   14 -
 src/mesa/drivers/dri/i915/i915_fragprog.c            |   83 ++++++--
 src/mesa/drivers/dri/i915/intel_fbo.c                |    5 
 src/mesa/drivers/dri/i965/brw_fs_surface_builder.cpp |   42 +++-
 src/mesa/main/ffvertex_prog.c                        |   17 +
 src/mesa/main/glformats.c                            |   21 +-
 src/mesa/main/mipmap.c                               |   36 +--
 src/mesa/state_tracker/st_cb_blit.c                  |    2 
 src/mesa/state_tracker/st_format.c                   |    6 
 47 files changed, 755 insertions(+), 199 deletions(-)

New commits:
commit 914966befcd57764941405707d8f57d3e7e7f768
Author: Emil Velikov <emil.l.veli...@gmail.com>
Date:   Sat Oct 10 16:21:58 2015 +0100

    docs: add release notes for 11.0.3
    
    Signed-off-by: Emil Velikov <emil.veli...@collabora.com>

diff --git a/docs/relnotes/11.0.3.html b/docs/relnotes/11.0.3.html
new file mode 100644
index 0000000..25fad25
--- /dev/null
+++ b/docs/relnotes/11.0.3.html
@@ -0,0 +1,184 @@
+<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" 
"http://www.w3.org/TR/html4/loose.dtd";>
+<html lang="en">
+<head>
+  <meta http-equiv="content-type" content="text/html; charset=utf-8">
+  <title>Mesa Release Notes</title>
+  <link rel="stylesheet" type="text/css" href="../mesa.css">
+</head>
+<body>
+
+<div class="header">
+  <h1>The Mesa 3D Graphics Library</h1>
+</div>
+
+<iframe src="../contents.html"></iframe>
+<div class="content">
+
+<h1>Mesa 11.0.3 Release Notes / October 10, 2015</h1>
+
+<p>
+Mesa 11.0.3 is a bug fix release which fixes bugs found since the 11.0.2 
release.
+</p>
+<p>
+Mesa 11.0.3 implements the OpenGL 4.1 API, but the version reported by
+glGetString(GL_VERSION) or glGetIntegerv(GL_MAJOR_VERSION) /
+glGetIntegerv(GL_MINOR_VERSION) depends on the particular driver being used.
+Some drivers don't support all the features required in OpenGL 4.1.  OpenGL
+4.1 is <strong>only</strong> available if requested at context creation
+because compatibility contexts are not supported.
+</p>
+
+
+<h2>SHA256 checksums</h2>
+<pre>
+TBD
+</pre>
+
+
+<h2>New features</h2>
+<p>None</p>
+
+<h2>Bug fixes</h2>
+
+<p>This list is likely incomplete.</p>
+
+<ul>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=55552";>Bug 55552</a> 
- Compile errors with --enable-mangling</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=71789";>Bug 71789</a> 
- [r300g] Visuals not found in (default) depth = 24</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91044";>Bug 91044</a> 
- piglit spec/egl_khr_create_context/valid debug flag gles* fail</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91342";>Bug 91342</a> 
- Very dark textures on some objects in indoors environments in Postal 2</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91596";>Bug 91596</a> 
- EGL_KHR_gl_colorspace (v2) causes problem with Android-x86 GUI</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=91718";>Bug 91718</a> 
- piglit.spec.arb_shader_image_load_store.invalid causes intermittent GPU 
HANG</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=92072";>Bug 92072</a> 
- Wine breakage since d082c5324 (st/mesa: don't call st_validate_state in 
BlitFramebuffer)</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=92265";>Bug 92265</a> 
- Black windows in weston after update mesa to 11.0.2-1</li>
+
+</ul>
+
+
+<h2>Changes</h2>
+
+<p>Brian Paul (1):</p>
+<ul>
+  <li>st/mesa: try PIPE_BIND_RENDER_TARGET when choosing float texture 
formats</li>
+</ul>
+
+<p>Daniel Scharrer (1):</p>
+<ul>
+  <li>mesa: Add abs input modifier to base for POW in ffvertex_prog</li>
+</ul>
+
+<p>Emil Velikov (3):</p>
+<ul>
+  <li>docs: add sha256 checksums for 11.0.2</li>
+  <li>Revert "nouveau: make sure there's always room to emit a fence"</li>
+  <li>Update version to 11.0.3</li>
+</ul>
+
+<p>Francisco Jerez (1):</p>
+<ul>
+  <li>i965/fs: Fix hang on IVB and VLV with image format mismatch.</li>
+</ul>
+
+<p>Ian Romanick (1):</p>
+<ul>
+  <li>meta: Handle array textures in scaled MSAA blits</li>
+</ul>
+
+<p>Ilia Mirkin (6):</p>
+<ul>
+  <li>nouveau: be more careful about freeing temporary transfer buffers</li>
+  <li>nouveau: delay deleting buffer with unflushed fence</li>
+  <li>nouveau: wait to unref the transfer's bo until it's no longer used</li>
+  <li>nv30: pretend to have packed texture/surface formats</li>
+  <li>nv30: always go through translate module on big-endian</li>
+  <li>nouveau: make sure there's always room to emit a fence</li>
+</ul>
+
+<p>Jason Ekstrand (1):</p>
+<ul>
+  <li>mesa: Correctly handle GL_BGRA_EXT in ES3 format_and_type checks</li>
+</ul>
+
+<p>Kyle Brenneman (3):</p>
+<ul>
+  <li>glx: Fix build errors with --enable-mangling (v2)</li>
+  <li>mapi: Make _glapi_get_stub work with "gl" or "mgl" prefix.</li>
+  <li>glx: Don't hard-code the name "libGL.so.1" in driOpenDriver (v3)</li>
+</ul>
+
+<p>Leo Liu (1):</p>
+<ul>
+  <li>radeon/vce: fix vui time_scale zero error</li>
+</ul>
+
+<p>Marek Olšák (21):</p>
+<ul>
+  <li>st/mesa: fix front buffer regression after dropping st_validate_state in 
Blit</li>
+  <li>radeonsi: handle index buffer alloc failures</li>
+  <li>radeonsi: handle constant buffer alloc failures</li>
+  <li>gallium/radeon: handle buffer_map staging buffer failures better</li>
+  <li>gallium/radeon: handle buffer alloc failures in r600_draw_rectangle</li>
+  <li>gallium/radeon: add a fail path for depth MSAA texture readback</li>
+  <li>radeonsi: report alloc failure from si_shader_binary_read</li>
+  <li>radeonsi: add malloc fail paths to si_create_shader_state</li>
+  <li>radeonsi: skip drawing if the tess factor ring allocation fails</li>
+  <li>radeonsi: skip drawing if GS ring allocations fail</li>
+  <li>radeonsi: handle shader precompile failures</li>
+  <li>radeonsi: handle fixed-func TCS shader create failure</li>
+  <li>radeonsi: skip drawing if VS, TCS, TES, GS fail to compile or upload</li>
+  <li>radeonsi: skip drawing if PS fails to compile or upload</li>
+  <li>radeonsi: skip drawing if updating the scratch buffer fails</li>
+  <li>radeonsi: don't forget to update scratch relocations for LS, HS, ES 
shaders</li>
+  <li>radeonsi: handle dummy constant buffer allocation failure</li>
+  <li>gallium/u_blitter: handle allocation failures</li>
+  <li>radeonsi: add scratch buffer to the buffer list when it's 
re-allocated</li>
+  <li>st/dri: don't use _ctx in client_wait_sync</li>
+  <li>egl/dri2: don't require a context for ClientWaitSync (v2)</li>
+</ul>
+
+<p>Matthew Waters (1):</p>
+<ul>
+  <li>egl: rework handling EGL_CONTEXT_FLAGS</li>
+</ul>
+
+<p>Michel Dänzer (1):</p>
+<ul>
+  <li>st/dri: Use packed RGB formats</li>
+</ul>
+
+<p>Roland Scheidegger (1):</p>
+<ul>
+  <li>mesa: fix mipmap generation for immutable, compressed textures</li>
+</ul>
+
+<p>Tom Stellard (3):</p>
+<ul>
+  <li>gallium/radeon: Use call_once() when initailizing LLVM targets</li>
+  <li>gallivm: Allow drivers and state trackers to initialize gallivm LLVM 
targets v2</li>
+  <li>radeon/llvm: Initialize gallivm targets when initializing the AMDGPU 
target v2</li>
+</ul>
+
+<p>Varad Gautam (1):</p>
+<ul>
+  <li>egl: restore surface type before linking config to its display</li>
+</ul>
+
+<p>Ville Syrjälä (3):</p>
+<ul>
+  <li>i830: Fix collision between I830_UPLOAD_RASTER_RULES and 
I830_UPLOAD_TEX(0)</li>
+  <li>i915: Fix texcoord vs. varying collision in fragment programs</li>
+  <li>i915: Remember to call intel_prepare_render() before blitting</li>
+</ul>
+
+
+</div>
+</body>
+</html>

commit 3c86315ca39831a7890708dec2ebbde68ed430db
Author: Emil Velikov <emil.l.veli...@gmail.com>
Date:   Sat Oct 10 16:17:43 2015 +0100

    Update version to 11.0.3
    
    Signed-off-by: Emil Velikov <emil.veli...@collabora.com>

diff --git a/VERSION b/VERSION
index a1ea332..e7e9473 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-11.0.2
+11.0.3

commit d0c22560a151a1ea726df4a6e001048a7c5b225e
Author: Emil Velikov <emil.l.veli...@gmail.com>
Date:   Sat Oct 10 16:15:08 2015 +0100

    Revert "nouveau: make sure there's always room to emit a fence"
    
    This reverts commit 30570b262971c881366deab58caf8d8d48d7d79d.
    
    As mentioned by Ilia Mirkin:
    
     Please remove this one from your list of cherry-picked patches. While
      it fixes real issues on nv30 (and probably the other generations too),
      it appears to introduce some new ones on nvc0. I've figured out what's
      causing it, but haven't figured out a proper fix. Not sure I'll be
      able to before you do a release.

diff --git a/src/gallium/drivers/nouveau/nouveau_winsys.h 
b/src/gallium/drivers/nouveau/nouveau_winsys.h
index a44fd3e..389a229 100644
--- a/src/gallium/drivers/nouveau/nouveau_winsys.h
+++ b/src/gallium/drivers/nouveau/nouveau_winsys.h
@@ -24,8 +24,6 @@ PUSH_AVAIL(struct nouveau_pushbuf *push)
 static inline bool
 PUSH_SPACE(struct nouveau_pushbuf *push, uint32_t size)
 {
-   /* Provide a buffer so that fences always have room to be emitted */
-   size += 8;
    if (PUSH_AVAIL(push) < size)
       return nouveau_pushbuf_space(push, size, 0, 0) == 0;
    return true;
diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.c 
b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
index 0aea4c0..efa3a59 100644
--- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c
+++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
@@ -345,9 +345,7 @@ nv30_screen_fence_emit(struct pipe_screen *pscreen, 
uint32_t *sequence)
 
    *sequence = ++screen->base.fence.sequence;
 
-   assert(PUSH_AVAIL(push) >= 3);
-   PUSH_DATA (push, NV30_3D_FENCE_OFFSET |
-              (2 /* size */ << 18) | (7 /* subchan */ << 13));
+   BEGIN_NV04(push, NV30_3D(FENCE_OFFSET), 2);
    PUSH_DATA (push, 0);
    PUSH_DATA (push, *sequence);
 }
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c 
b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
index 1cc16b6..6d015c4 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
@@ -386,7 +386,6 @@ nv50_screen_fence_emit(struct pipe_screen *pscreen, u32 
*sequence)
    /* we need to do it after possible flush in MARK_RING */
    *sequence = ++screen->base.fence.sequence;
 
-   assert(PUSH_AVAIL(push) >= 5);
    PUSH_DATA (push, NV50_FIFO_PKHDR(NV50_3D(QUERY_ADDRESS_HIGH), 4));
    PUSH_DATAh(push, screen->fence.bo->offset);
    PUSH_DATA (push, screen->fence.bo->offset);
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c 
b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
index 51aaf7a..3fb4d8c 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
@@ -535,8 +535,7 @@ nvc0_screen_fence_emit(struct pipe_screen *pscreen, u32 
*sequence)
    /* we need to do it after possible flush in MARK_RING */
    *sequence = ++screen->base.fence.sequence;
 
-   assert(PUSH_AVAIL(push) >= 5);
-   PUSH_DATA (push, NVC0_FIFO_PKHDR_SQ(NVC0_3D(QUERY_ADDRESS_HIGH), 4));
+   BEGIN_NVC0(push, NVC0_3D(QUERY_ADDRESS_HIGH), 4);
    PUSH_DATAh(push, screen->fence.bo->offset);
    PUSH_DATA (push, screen->fence.bo->offset);
    PUSH_DATA (push, *sequence);

commit 1a866b3e49d05555c9f06c5d06142163fb214d5b
Author: Jason Ekstrand <jason.ekstr...@intel.com>
Date:   Wed Oct 7 15:52:09 2015 -0700

    mesa: Correctly handle GL_BGRA_EXT in ES3 format_and_type checks
    
    The EXT_texture_format_BGRA8888 extension (which mesa supports
    unconditionally) adds a new format and internal format called GL_BGRA_EXT.
    Previously, this was not really handled at all in
    _mesa_ex3_error_check_format_and_type.  When the checks were tightened in
    commit f15a7f3c, we accidentally tightened things too far and GL_BGRA_EXT
    would always cause an error to be thrown.
    
    There were two primary issues here.  First, is that
    _mesa_es3_effective_internal_format_for_format_and_type didn't handle the
    GL_BGRA_EXT format.  Second is that it blindly uses _mesa_base_tex_format
    which returns GL_RGBA for GL_BGRA_EXT.  This commit fixes both of these
    issues as well as adds explicit checks that GL_BGRA_EXT is only ever used
    with GL_BGRA_EXT and GL_UNSIGNED_BYTE.
    
    Signed-off-by: Jason Ekstrand <jason.ekstr...@intel.com>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92265
    Reviewed-by: Ian Romanick <ian.d.roman...@intel.com>
    Cc: "11.0" <mesa-sta...@lists.freedesktop.org>
    (cherry picked from commit 6ad9ebb073fc4ed245ef8e9db4479a52e818cb92)

diff --git a/src/mesa/main/glformats.c b/src/mesa/main/glformats.c
index d7cad31..629a0a4 100644
--- a/src/mesa/main/glformats.c
+++ b/src/mesa/main/glformats.c
@@ -2619,6 +2619,7 @@ 
_mesa_es3_effective_internal_format_for_format_and_type(GLenum format,
        * internal formats, they do not correspond to GL constants, so the base
        * format is returned instead.
        */
+      case GL_BGRA_EXT:
       case GL_LUMINANCE_ALPHA:
       case GL_LUMINANCE:
       case GL_ALPHA:
@@ -2738,8 +2739,19 @@ _mesa_es3_error_check_format_and_type(const struct 
gl_context *ctx,
       if (effectiveInternalFormat == GL_NONE)
          return GL_INVALID_OPERATION;
 
-      GLenum baseInternalFormat =
-         _mesa_base_tex_format(ctx, effectiveInternalFormat);
+      GLenum baseInternalFormat;
+      if (internalFormat == GL_BGRA_EXT) {
+         /* Unfortunately, _mesa_base_tex_format returns a base format of
+          * GL_RGBA for GL_BGRA_EXT.  This makes perfect sense if you're
+          * asking the question, "what channels does this format have?"
+          * However, if we're trying to determine if two internal formats
+          * match in the ES3 sense, we actually want GL_BGRA.
+          */
+         baseInternalFormat = GL_BGRA_EXT;
+      } else {
+         baseInternalFormat =
+            _mesa_base_tex_format(ctx, effectiveInternalFormat);
+      }
 
       if (internalFormat != baseInternalFormat)
          return GL_INVALID_OPERATION;
@@ -2748,6 +2760,11 @@ _mesa_es3_error_check_format_and_type(const struct 
gl_context *ctx,
    }
 
    switch (format) {
+   case GL_BGRA_EXT:
+      if (type != GL_UNSIGNED_BYTE || internalFormat != GL_BGRA)
+         return GL_INVALID_OPERATION;
+      break;
+
    case GL_RGBA:
       switch (type) {
       case GL_UNSIGNED_BYTE:

commit b1230e3e01f1b861ab374f7b115c1f7e4bfd0370
Author: Michel Dänzer <michel.daen...@amd.com>
Date:   Mon Aug 10 18:44:18 2015 +0900

    st/dri: Use packed RGB formats
    
    Fixes Gallium based DRI drivers failing to load on big endian hosts
    because they can't find any matching fbconfigs.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=71789
    Signed-off-by: Michel Dänzer <michel.daen...@amd.com>
    Reviewed-by: Marek Olšák <marek.ol...@amd.com>
    Tested-by: Ilia Mirkin <imir...@alum.mit.edu>
    (cherry picked from commit 87c3c9acd29655d6c8778ea732f559eebeddd5f6)
    Nominated-by: Ilia Mirkin <imir...@alum.mit.edu>

diff --git a/src/gallium/state_trackers/dri/dri2.c 
b/src/gallium/state_trackers/dri/dri2.c
index 712203b..019414b 100644
--- a/src/gallium/state_trackers/dri/dri2.c
+++ b/src/gallium/state_trackers/dri/dri2.c
@@ -188,10 +188,10 @@ dri2_drawable_get_buffers(struct dri_drawable *drawable,
        * may occur as the stvis->color_format.
        */
       switch(format) {
-      case PIPE_FORMAT_B8G8R8A8_UNORM:
+      case PIPE_FORMAT_BGRA8888_UNORM:
         depth = 32;
         break;
-      case PIPE_FORMAT_B8G8R8X8_UNORM:
+      case PIPE_FORMAT_BGRX8888_UNORM:
         depth = 24;
         break;
       case PIPE_FORMAT_B5G6R5_UNORM:
@@ -261,13 +261,13 @@ dri_image_drawable_get_buffers(struct dri_drawable 
*drawable,
       case PIPE_FORMAT_B5G6R5_UNORM:
          image_format = __DRI_IMAGE_FORMAT_RGB565;
          break;
-      case PIPE_FORMAT_B8G8R8X8_UNORM:
+      case PIPE_FORMAT_BGRX8888_UNORM:
          image_format = __DRI_IMAGE_FORMAT_XRGB8888;
          break;
-      case PIPE_FORMAT_B8G8R8A8_UNORM:
+      case PIPE_FORMAT_BGRA8888_UNORM:
          image_format = __DRI_IMAGE_FORMAT_ARGB8888;
          break;
-      case PIPE_FORMAT_R8G8B8A8_UNORM:
+      case PIPE_FORMAT_RGBA8888_UNORM:
          image_format = __DRI_IMAGE_FORMAT_ABGR8888;
          break;
       default:
@@ -314,10 +314,10 @@ dri2_allocate_buffer(__DRIscreen *sPriv,
 
    switch (format) {
       case 32:
-         pf = PIPE_FORMAT_B8G8R8A8_UNORM;
+         pf = PIPE_FORMAT_BGRA8888_UNORM;
          break;
       case 24:
-         pf = PIPE_FORMAT_B8G8R8X8_UNORM;
+         pf = PIPE_FORMAT_BGRX8888_UNORM;
          break;
       case 16:
          pf = PIPE_FORMAT_Z16_UNORM;
@@ -724,13 +724,13 @@ dri2_create_image_from_winsys(__DRIscreen *_screen,
       pf = PIPE_FORMAT_B5G6R5_UNORM;
       break;
    case __DRI_IMAGE_FORMAT_XRGB8888:
-      pf = PIPE_FORMAT_B8G8R8X8_UNORM;
+      pf = PIPE_FORMAT_BGRX8888_UNORM;
       break;
    case __DRI_IMAGE_FORMAT_ARGB8888:
-      pf = PIPE_FORMAT_B8G8R8A8_UNORM;
+      pf = PIPE_FORMAT_BGRA8888_UNORM;
       break;
    case __DRI_IMAGE_FORMAT_ABGR8888:
-      pf = PIPE_FORMAT_R8G8B8A8_UNORM;
+      pf = PIPE_FORMAT_RGBA8888_UNORM;
       break;
    default:
       pf = PIPE_FORMAT_NONE;
@@ -845,13 +845,13 @@ dri2_create_image(__DRIscreen *_screen,
       pf = PIPE_FORMAT_B5G6R5_UNORM;
       break;
    case __DRI_IMAGE_FORMAT_XRGB8888:
-      pf = PIPE_FORMAT_B8G8R8X8_UNORM;
+      pf = PIPE_FORMAT_BGRX8888_UNORM;
       break;
    case __DRI_IMAGE_FORMAT_ARGB8888:
-      pf = PIPE_FORMAT_B8G8R8A8_UNORM;
+      pf = PIPE_FORMAT_BGRA8888_UNORM;
       break;
    case __DRI_IMAGE_FORMAT_ABGR8888:
-      pf = PIPE_FORMAT_R8G8B8A8_UNORM;
+      pf = PIPE_FORMAT_RGBA8888_UNORM;
       break;
    default:
       pf = PIPE_FORMAT_NONE;
diff --git a/src/gallium/state_trackers/dri/dri_drawable.c 
b/src/gallium/state_trackers/dri/dri_drawable.c
index 0d2929a..f0cc4a2 100644
--- a/src/gallium/state_trackers/dri/dri_drawable.c
+++ b/src/gallium/state_trackers/dri/dri_drawable.c
@@ -231,11 +231,11 @@ dri_set_tex_buffer2(__DRIcontext *pDRICtx, GLint target,
       if (format == __DRI_TEXTURE_FORMAT_RGB)  {
          /* only need to cover the formats recognized by dri_fill_st_visual */
          switch (internal_format) {
-         case PIPE_FORMAT_B8G8R8A8_UNORM:
-            internal_format = PIPE_FORMAT_B8G8R8X8_UNORM;
+         case PIPE_FORMAT_BGRA8888_UNORM:
+            internal_format = PIPE_FORMAT_BGRX8888_UNORM;
             break;
-         case PIPE_FORMAT_A8R8G8B8_UNORM:
-            internal_format = PIPE_FORMAT_X8R8G8B8_UNORM;
+         case PIPE_FORMAT_ARGB8888_UNORM:
+            internal_format = PIPE_FORMAT_XRGB8888_UNORM;
             break;
          default:
             break;

commit d09b37e7d538974a2104c4d7b3110e61de7d489b
Author: Varad Gautam <varadgau...@gmail.com>
Date:   Wed Oct 7 09:48:14 2015 +0530

    egl: restore surface type before linking config to its display
    
    commit c2c2e9a (egl: implement EGL_KHR_gl_colorspace (v2)) leaves
    _EGLConfig->SurfaceType set incorrectly before calling _eglLinkConfig(),
    and the bad value is passed around to platform_android. set it to zero
    as earlier.
    
    v2: Set SurfaceType to 0, rather than surface_type (Suggested by Emil)
    
    Cc: mesa-sta...@lists.freedesktop.org
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91596
    Signed-off-by: Varad Gautam <varadgau...@gmail.com>
    Reviewed-by: Emil Velikov <emil.l.veli...@gmail.com>
    (cherry picked from commit f988eff37991272b3e685112136a8b2ae06386bf)

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index 7877178..10b4342 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -312,6 +312,8 @@ dri2_add_config(_EGLDisplay *disp, const __DRIconfig 
*dri_config, int id,
          else
             conf->dri_single_config = dri_config;
       }
+
+      conf->base.SurfaceType = 0;
       conf->base.ConfigID = config_id;
 
       _eglLinkConfig(&conf->base);

commit 30570b262971c881366deab58caf8d8d48d7d79d
Author: Ilia Mirkin <imir...@alum.mit.edu>
Date:   Mon Oct 5 15:19:05 2015 -0400

    nouveau: make sure there's always room to emit a fence
    
    I started seeing a lot of situations on nv30 where fence emission
    wouldn't fit into the previous buffer (causing assertions). This ensures
    that whenever checking for space, we always leave a bit of extra room
    for the fence emission commands. Adjusts the nv30 and nvc0 fence
    emission logic to bypass the space checking as well.
    
    Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu>
    Cc: mesa-sta...@lists.freedesktop.org
    Reviewed-by: Samuel Pitoiset <samuel.pitoi...@gmail.com>
    (cherry picked from commit 47d11990b2ca3eb666b8ac81fee7f7eb5019eba1)

diff --git a/src/gallium/drivers/nouveau/nouveau_winsys.h 
b/src/gallium/drivers/nouveau/nouveau_winsys.h
index 389a229..a44fd3e 100644
--- a/src/gallium/drivers/nouveau/nouveau_winsys.h
+++ b/src/gallium/drivers/nouveau/nouveau_winsys.h
@@ -24,6 +24,8 @@ PUSH_AVAIL(struct nouveau_pushbuf *push)
 static inline bool
 PUSH_SPACE(struct nouveau_pushbuf *push, uint32_t size)
 {
+   /* Provide a buffer so that fences always have room to be emitted */
+   size += 8;
    if (PUSH_AVAIL(push) < size)
       return nouveau_pushbuf_space(push, size, 0, 0) == 0;
    return true;
diff --git a/src/gallium/drivers/nouveau/nv30/nv30_screen.c 
b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
index efa3a59..0aea4c0 100644
--- a/src/gallium/drivers/nouveau/nv30/nv30_screen.c
+++ b/src/gallium/drivers/nouveau/nv30/nv30_screen.c
@@ -345,7 +345,9 @@ nv30_screen_fence_emit(struct pipe_screen *pscreen, 
uint32_t *sequence)
 
    *sequence = ++screen->base.fence.sequence;
 
-   BEGIN_NV04(push, NV30_3D(FENCE_OFFSET), 2);
+   assert(PUSH_AVAIL(push) >= 3);
+   PUSH_DATA (push, NV30_3D_FENCE_OFFSET |
+              (2 /* size */ << 18) | (7 /* subchan */ << 13));
    PUSH_DATA (push, 0);
    PUSH_DATA (push, *sequence);
 }
diff --git a/src/gallium/drivers/nouveau/nv50/nv50_screen.c 
b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
index 6d015c4..1cc16b6 100644
--- a/src/gallium/drivers/nouveau/nv50/nv50_screen.c
+++ b/src/gallium/drivers/nouveau/nv50/nv50_screen.c
@@ -386,6 +386,7 @@ nv50_screen_fence_emit(struct pipe_screen *pscreen, u32 
*sequence)
    /* we need to do it after possible flush in MARK_RING */
    *sequence = ++screen->base.fence.sequence;
 
+   assert(PUSH_AVAIL(push) >= 5);
    PUSH_DATA (push, NV50_FIFO_PKHDR(NV50_3D(QUERY_ADDRESS_HIGH), 4));
    PUSH_DATAh(push, screen->fence.bo->offset);
    PUSH_DATA (push, screen->fence.bo->offset);
diff --git a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c 
b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
index 3fb4d8c..51aaf7a 100644
--- a/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
+++ b/src/gallium/drivers/nouveau/nvc0/nvc0_screen.c
@@ -535,7 +535,8 @@ nvc0_screen_fence_emit(struct pipe_screen *pscreen, u32 
*sequence)
    /* we need to do it after possible flush in MARK_RING */
    *sequence = ++screen->base.fence.sequence;
 
-   BEGIN_NVC0(push, NVC0_3D(QUERY_ADDRESS_HIGH), 4);
+   assert(PUSH_AVAIL(push) >= 5);
+   PUSH_DATA (push, NVC0_FIFO_PKHDR_SQ(NVC0_3D(QUERY_ADDRESS_HIGH), 4));
    PUSH_DATAh(push, screen->fence.bo->offset);
    PUSH_DATA (push, screen->fence.bo->offset);
    PUSH_DATA (push, *sequence);

commit f114967ca9725152288bb648cedceb860d7d06c0
Author: Ilia Mirkin <imir...@alum.mit.edu>
Date:   Sun Oct 4 21:47:33 2015 -0400

    nv30: always go through translate module on big-endian
    
    It seems like things are either coming in slighly wrong, or perhaps
    uploaded incorrectly, but either way passing them through the translate
    module seems to fix everything. Eventually we should figure out what's
    going wrong and fix it "for real", but this should do for now.
    
    Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu>
    Cc: mesa-sta...@lists.freedesktop.org
    (cherry picked from commit 78ec9e28ec759bcaf9781bcbd2b8e051f7df7896)

diff --git a/src/gallium/drivers/nouveau/nv30/nv30_vbo.c 
b/src/gallium/drivers/nouveau/nv30/nv30_vbo.c
index 8494549..dec3a0b 100644
--- a/src/gallium/drivers/nouveau/nv30/nv30_vbo.c
+++ b/src/gallium/drivers/nouveau/nv30/nv30_vbo.c
@@ -191,7 +191,11 @@ nv30_vbo_validate(struct nv30_context *nv30)
    if (!nv30->vertex || nv30->draw_flags)
       return;
 
+#ifdef PIPE_ARCH_BIG_ENDIAN
+   if (1) { /* Figure out where the buffers are getting messed up */
+#else
    if (unlikely(vertex->need_conversion)) {
+#endif
       nv30->vbo_fifo = ~0;
       nv30->vbo_user = 0;
    } else {

commit 39a3871b1ef0676ad1e91855124161fafac8d57d
Author: Ilia Mirkin <imir...@alum.mit.edu>
Date:   Sun Oct 4 21:45:51 2015 -0400

    nv30: pretend to have packed texture/surface formats
    
    This puts us in line with what the DDX/DRI2 st are expecting. It also
    happens to work... no idea why, but seems better to have it work than to
    ask lots of questions.
    
    Signed-off-by: Ilia Mirkin <imir...@alum.mit.edu>
    Cc: mesa-sta...@lists.freedesktop.org
    (cherry picked from commit 1fec05d1142921cdb5b01d94d886062c57905edc)

diff --git a/src/gallium/drivers/nouveau/nv30/nv30_format.c 
b/src/gallium/drivers/nouveau/nv30/nv30_format.c
index 67e0d5e..8d9516b 100644
--- a/src/gallium/drivers/nouveau/nv30/nv30_format.c
+++ b/src/gallium/drivers/nouveau/nv30/nv30_format.c
@@ -78,12 +78,12 @@ nv30_format_info_table[PIPE_FORMAT_COUNT] = {
    _(B4G4R4X4_UNORM      , S___),
    _(B4G4R4A4_UNORM      , S___),
    _(B5G6R5_UNORM        , SB__),
-   _(B8G8R8X8_UNORM      , SB__),
-   _(B8G8R8X8_SRGB       , S___),
-   _(B8G8R8A8_UNORM      , SB__),
-   _(B8G8R8A8_SRGB       , S___),
+   _(BGRX8888_UNORM      , SB__),
+   _(BGRX8888_SRGB       , S___),
+   _(BGRA8888_UNORM      , SB__),
+   _(BGRA8888_SRGB       , S___),
    _(R8G8B8A8_UNORM      , __V_),
-   _(R8G8B8A8_SNORM      , S___),
+   _(RGBA8888_SNORM      , S___),
    _(DXT1_RGB            , S___),
    _(DXT1_SRGB           , S___),
    _(DXT1_RGBA           , S___),
@@ -138,8 +138,8 @@ const struct nv30_format
 nv30_format_table[PIPE_FORMAT_COUNT] = {
    R_(B5G5R5X1_UNORM    , X1R5G5B5          ),
    R_(B5G6R5_UNORM      , R5G6B5            ),
-   R_(B8G8R8X8_UNORM    , X8R8G8B8          ),
-   R_(B8G8R8A8_UNORM    , A8R8G8B8          ),
+   R_(BGRX8888_UNORM    , X8R8G8B8          ),
+   R_(BGRA8888_UNORM    , A8R8G8B8          ),
    Z_(Z16_UNORM         , Z16               ),
    Z_(X8Z24_UNORM       , Z24S8             ),
    Z_(S8_UINT_Z24_UNORM , Z24S8             ),
@@ -223,11 +223,11 @@ nv30_texfmt_table[PIPE_FORMAT_COUNT] = {
    _(B4G4R4X4_UNORM    , A4R4G4B4, 0, C, C, C, 1, 2, 1, 0, x, NONE, ____),
    _(B4G4R4A4_UNORM    , A4R4G4B4, 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),
    _(B5G6R5_UNORM      , R5G6B5  , 0, C, C, C, 1, 2, 1, 0, x, NONE, ____),
-   _(B8G8R8X8_UNORM    , A8R8G8B8, 0, C, C, C, 1, 2, 1, 0, x, NONE, ____),
-   _(B8G8R8X8_SRGB     , A8R8G8B8, 0, C, C, C, 1, 2, 1, 0, x, SRGB, ____),
-   _(B8G8R8A8_UNORM    , A8R8G8B8, 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),
-   _(B8G8R8A8_SRGB     , A8R8G8B8, 0, C, C, C, C, 2, 1, 0, 3, SRGB, ____),
-   _(R8G8B8A8_SNORM    , A8R8G8B8, 0, C, C, C, C, 0, 1, 2, 3, NONE, SSSS),
+   _(BGRX8888_UNORM    , A8R8G8B8, 0, C, C, C, 1, 2, 1, 0, x, NONE, ____),
+   _(BGRX8888_SRGB     , A8R8G8B8, 0, C, C, C, 1, 2, 1, 0, x, SRGB, ____),
+   _(BGRA8888_UNORM    , A8R8G8B8, 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),
+   _(BGRA8888_SRGB     , A8R8G8B8, 0, C, C, C, C, 2, 1, 0, 3, SRGB, ____),
+   _(RGBA8888_SNORM    , A8R8G8B8, 0, C, C, C, C, 0, 1, 2, 3, NONE, SSSS),
    _(DXT1_RGB          , DXT1    , 0, C, C, C, 1, 2, 1, 0, x, NONE, ____),
    _(DXT1_SRGB         , DXT1    , 0, C, C, C, 1, 2, 1, 0, x, SRGB, ____),
    _(DXT1_RGBA         , DXT1    , 0, C, C, C, C, 2, 1, 0, 3, NONE, ____),

commit 28373c75bac256a13b77faf6754a20414ec7d900
Author: Marek Olšák <marek.ol...@amd.com>
Date:   Fri Sep 25 22:48:00 2015 +0200

    egl/dri2: don't require a context for ClientWaitSync (v2)
    
    The spec doesn't require it. This fixes a crash on Android.
    
    v2: don't set any flags if ctx == NULL
    v3: add the spec note
    
    Cc: 10.6 11.0 <mesa-sta...@lists.freedesktop.org>
    Reviewed-by: Albert Freeman <albertwdfree...@gmail.com>
    Reviewed-by: Frank Binns <frank.bi...@imgtec.com>
    (cherry picked from commit 18123a732b8593bb7add03d1529ace464f46a7ac)

diff --git a/src/egl/drivers/dri2/egl_dri2.c b/src/egl/drivers/dri2/egl_dri2.c
index 461735f..7877178 100644
--- a/src/egl/drivers/dri2/egl_dri2.c
+++ b/src/egl/drivers/dri2/egl_dri2.c
@@ -2384,13 +2384,18 @@ dri2_client_wait_sync(_EGLDriver *drv, _EGLDisplay 
*dpy, _EGLSync *sync,
    unsigned wait_flags = 0;
    EGLint ret = EGL_CONDITION_SATISFIED_KHR;
 
-   if (flags & EGL_SYNC_FLUSH_COMMANDS_BIT_KHR)
+   /* The EGL_KHR_fence_sync spec states:
+    *
+    *    "If no context is current for the bound API,
+    *     the EGL_SYNC_FLUSH_COMMANDS_BIT_KHR bit is ignored.
+    */
+   if (dri2_ctx && flags & EGL_SYNC_FLUSH_COMMANDS_BIT_KHR)
       wait_flags |= __DRI2_FENCE_FLAG_FLUSH_COMMANDS;
 
    /* the sync object should take a reference while waiting */
    dri2_egl_ref_sync(dri2_sync);
 
-   if (dri2_dpy->fence->client_wait_sync(dri2_ctx->dri_context,
+   if (dri2_dpy->fence->client_wait_sync(dri2_ctx ? dri2_ctx->dri_context : 
NULL,
                                          dri2_sync->fence, wait_flags,
                                          timeout))
       dri2_sync->base.SyncStatus = EGL_SIGNALED_KHR;

commit eabc65632491cdca7e22986604182ee94f3fc3ac
Author: Marek Olšák <marek.ol...@amd.com>
Date:   Fri Sep 25 22:44:41 2015 +0200

    st/dri: don't use _ctx in client_wait_sync
    
    Not needed and it can be NULL.
    
    v2: fix dri2_get_fence_from_cl_event - thanks Albert
    
    Cc: 10.6 11.0 <mesa-sta...@lists.freedesktop.org>
    Reviewed-by: Albert Freeman <albertwdfree...@gmail.com>
    (cherry picked from commit b78336085bce4d1f36c8d9c72fd3fa41643e3cd1)

diff --git a/src/gallium/state_trackers/dri/dri2.c 
b/src/gallium/state_trackers/dri/dri2.c
index 91b4431..712203b 100644
--- a/src/gallium/state_trackers/dri/dri2.c
+++ b/src/gallium/state_trackers/dri/dri2.c
@@ -1293,6 +1293,7 @@ dri2_load_opencl_interop(struct dri_screen *screen)
 }
 
 struct dri2_fence {
+   struct dri_screen *driscreen;
    struct pipe_fence_handle *pipe_fence;
    void *cl_event;
 };
@@ -1313,6 +1314,7 @@ dri2_create_fence(__DRIcontext *_ctx)
       return NULL;
    }
 
+   fence->driscreen = dri_screen(_ctx->driScreenPriv);
    return fence;
 }
 
@@ -1336,6 +1338,7 @@ dri2_get_fence_from_cl_event(__DRIscreen *_screen, 
intptr_t cl_event)
       return NULL;
    }
 
+   fence->driscreen = driscreen;
    return fence;
 }
 
@@ -1360,9 +1363,9 @@ static GLboolean
 dri2_client_wait_sync(__DRIcontext *_ctx, void *_fence, unsigned flags,
                       uint64_t timeout)
 {
-   struct dri_screen *driscreen = dri_screen(_ctx->driScreenPriv);
-   struct pipe_screen *screen = driscreen->base.screen;
    struct dri2_fence *fence = (struct dri2_fence*)_fence;
+   struct dri_screen *driscreen = fence->driscreen;
+   struct pipe_screen *screen = driscreen->base.screen;
 
    /* No need to flush. The context was flushed when the fence was created. */
 

commit 1f2d007e49e743f475c13adfe02ffc86a14ebfae
Author: Matthew Waters <ystree...@gmail.com>
Date:   Mon Sep 14 18:35:45 2015 +0100

    egl: rework handling EGL_CONTEXT_FLAGS
    
    As of version 15 of the EGL_KHR_create_context spec, debug contexts
    are allowed for ES contexts.  We should allow creation instead of
    erroring.
    
    While we're here provide a more comprehensive checking for the other two
    flags - ROBUST_ACCESS_BIT_KHR and FORWARD_COMPATIBLE_BIT_KHR
    
    v2 [Emil Velikov] Rebase. Minor tweak in commit message.
    
    Cc: Boyan Ding <boyan.j.d...@gmail.com>
    Cc: Chad Versace <chad.vers...@intel.com>
    Cc: "10.6 11.0" <mesa-sta...@lists.freedesktop.org>
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=91044
    Signed-off-by: Matthew Waters <ystree...@gmail.com>
    Signed-off-by: Emil Velikov <emil.l.veli...@gmail.com>
    (cherry picked from commit 11cabc45b7124e51d5ead42db6dceb5a3755266b)

diff --git a/src/egl/main/eglcontext.c b/src/egl/main/eglcontext.c
index 588f489..ae19862 100644
--- a/src/egl/main/eglcontext.c
+++ b/src/egl/main/eglcontext.c
@@ -152,12 +152,51 @@ _eglParseContextAttribList(_EGLContext *ctx, _EGLDisplay 
*dpy,
 
          /* The EGL_KHR_create_context spec says:
           *
-          *     "Flags are only defined for OpenGL context creation, and
-          *     specifying a flags value other than zero for other types of
-          *     contexts, including OpenGL ES contexts, will generate an
-          *     error."
+          *     "If the EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR flag bit is set in
+          *     EGL_CONTEXT_FLAGS_KHR, then a <debug context> will be created.
+          *     [...]
+          *     In some cases a debug context may be identical to a non-debug
+          *     context. This bit is supported for OpenGL and OpenGL ES
+          *     contexts."
+          */
+         if ((val & EGL_CONTEXT_OPENGL_DEBUG_BIT_KHR) &&
+             (api != EGL_OPENGL_API && api != EGL_OPENGL_ES_API)) {
+            err = EGL_BAD_ATTRIBUTE;
+            break;
+         }
+
+         /* The EGL_KHR_create_context spec says:
+          *
+          *     "If the EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR flag bit
+          *     is set in EGL_CONTEXT_FLAGS_KHR, then a <forward-compatible>
+          *     context will be created. Forward-compatible contexts are
+          *     defined only for OpenGL versions 3.0 and later. They must not
+          *     support functionality marked as <deprecated> by that version of
+          *     the API, while a non-forward-compatible context must support
+          *     all functionality in that version, deprecated or not. This bit
+          *     is supported for OpenGL contexts, and requesting a
+          *     forward-compatible context for OpenGL versions less than 3.0
+          *     will generate an error."
+          */
+         if ((val & EGL_CONTEXT_OPENGL_FORWARD_COMPATIBLE_BIT_KHR) &&
+             (api != EGL_OPENGL_API || ctx->ClientMajorVersion < 3)) {
+            err = EGL_BAD_ATTRIBUTE;
+            break;
+         }
+
+         /* The EGL_KHR_create_context_spec says:
+          *
+          *     "If the EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR bit is set in
+          *     EGL_CONTEXT_FLAGS_KHR, then a context supporting <robust buffer
+          *     access> will be created. Robust buffer access is defined in the
+          *     GL_ARB_robustness extension specification, and the resulting
+          *     context must also support either the GL_ARB_robustness
+          *     extension, or a version of OpenGL incorporating equivalent
+          *     functionality. This bit is supported for OpenGL contexts.
           */
-         if (api != EGL_OPENGL_API && val != 0) {
+         if ((val & EGL_CONTEXT_OPENGL_ROBUST_ACCESS_BIT_KHR) &&
+             (api != EGL_OPENGL_API ||
+              !dpy->Extensions.EXT_create_context_robustness)) {
             err = EGL_BAD_ATTRIBUTE;
             break;
          }

commit 00425de65779ad3a61639287088ea5eaaf567cb6
Author: Tom Stellard <thomas.stell...@amd.com>
Date:   Thu Sep 24 16:29:56 2015 +0000

    radeon/llvm: Initialize gallivm targets when initializing the AMDGPU target 
v2
    
    This fixes a race condition in the glx-multithreaded-shader-compile
    test.
    
    v2:
      - Replace gallivm_init_llvm_{begin,end}() with 
gallivm_init_llvm_targets().
    
    Reviewed-by: Marek Olšák <marek.ol...@amd.com>
    Reviewed-by: Mathias Fröhlich <mathias.froehl...@web.de>
    Reviewed-by: Emil Velikov <emil.l.veli...@gmail.com>
    
    CC: "10.6 11.0" <mesa-sta...@lists.freedesktop.org>
    (cherry picked from commit a2e1e3d325a70604151ef093ed741e60d078a21a)

diff --git a/src/gallium/drivers/radeon/radeon_llvm_emit.c 
b/src/gallium/drivers/radeon/radeon_llvm_emit.c
index 5d93a4d..1a66a55 100644
--- a/src/gallium/drivers/radeon/radeon_llvm_emit.c
+++ b/src/gallium/drivers/radeon/radeon_llvm_emit.c
@@ -26,6 +26,7 @@
 #include "radeon_llvm_emit.h"
 #include "radeon_elf_util.h"
 #include "c11/threads.h"
+#include "gallivm/lp_bld_misc.h"
 #include "util/u_memory.h"
 #include "pipe/p_shader_tokens.h"
 
@@ -87,6 +88,7 @@ void radeon_llvm_shader_type(LLVMValueRef F, unsigned type)
 
 static void init_r600_target()
 {
+       gallivm_init_llvm_targets();
 #if HAVE_LLVM < 0x0307
        LLVMInitializeR600TargetInfo();
        LLVMInitializeR600Target();

commit 16d9e621073ae9d2fbd454708cdb3e7eb32d6f55
Author: Tom Stellard <thomas.stell...@amd.com>
Date:   Thu Sep 24 15:57:02 2015 +0000

    gallivm: Allow drivers and state trackers to initialize gallivm LLVM 
targets v2
    
    Drivers and state trackers that use LLVM for generating code, must
    register the targets they use with LLVM's global TargetRegistry.
    The TargetRegistry is not thread-safe, so all targets must be added
    to the registry before it can be queried for target information.
    
    When drivers and state trackers initialize their own targets, they need
    a way to force gallivm to initialize its targets at the same time.
    Otherwise, there can be a race condition in some multi-threaded
    applications (e.g. glx-multihreaded-shader-compile in piglit),
    when one thread creates a context for a driver that uses LLVM (e.g.
    radeonsi) and another thread creates a gallivm context (glxContextCreate
    does this).
    
    The race happens when the driver thread initializes its LLVM targets and
    then starts using the registry before the gallivm thread has a chance to
    register its targets.
    
    This patch allows users to force gallivm to register its targets by
    calling the gallivm_init_llvm_targets() function.
    
    v2:
      - Use call_once and remove mutexes and static initializations.
      - Replace gallivm_init_llvm_{begin,end}() with
        gallivm_init_llvm_targets().
    
    Reviewed-by: Marek Olšák <marek.ol...@amd.com>
    Reviewed-by: Mathias Fröhlich <mathias.froehl...@web.de>
    Reviewed-by: Emil Velikov <emil.l.veli...@gmail.com>
    
    CC: "10.6 11.0" <mesa-sta...@lists.freedesktop.org>
    (cherry picked from commit 76cfd6f1da3748effb480e4f1151910af59fb88a)

diff --git a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp 
b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
index 5e25819..72fab8c 100644
--- a/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
+++ b/src/gallium/auxiliary/gallivm/lp_bld_misc.cpp
@@ -81,6 +81,8 @@
 #  pragma pop_macro("DEBUG")
 #endif
 
+#include "c11/threads.h"
+#include "os/os_thread.h"
 #include "pipe/p_config.h"

Reply via email to