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

mesa: Changes to 'debian-unstable'



 VERSION                                                    |    2 
 debian/changelog                                           |    6 
 docs/relnotes/10.3.1.html                                  |    4 
 docs/relnotes/10.3.2.html                                  |  113 +++++++++++++
 src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp |    4 
 src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gm107.cpp |    2 
 src/gallium/drivers/r600/r600_state_common.c               |    9 -
 src/gallium/drivers/radeon/r600_buffer_common.c            |    4 
 src/gallium/drivers/radeonsi/si_descriptors.c              |    5 
 src/gallium/state_trackers/gbm/gbm_drm.c                   |    2 
 src/gallium/state_trackers/wgl/stw_ext_context.c           |    4 
 src/gallium/winsys/radeon/drm/radeon_drm_bo.c              |   15 -
 src/gallium/winsys/radeon/drm/radeon_drm_winsys.c          |   46 ++---
 src/gallium/winsys/radeon/drm/radeon_drm_winsys.h          |    8 
 src/glsl/ast_to_hir.cpp                                    |   10 -
 src/glx/xfont.c                                            |    5 
 src/mesa/drivers/dri/i965/brw_defines.h                    |   10 -
 src/mesa/drivers/dri/i965/gen8_surface_state.c             |    2 
 src/mesa/drivers/dri/i965/intel_extensions.c               |    2 
 src/mesa/drivers/dri/nouveau/nouveau_context.c             |    3 
 src/mesa/main/context.c                                    |   36 ++++
 src/mesa/main/texgetimage.c                                |    9 -
 src/mesa/state_tracker/st_cb_eglimage.c                    |    3 
 src/mesa/state_tracker/st_cb_texture.c                     |   13 -
 src/mesa/state_tracker/st_gen_mipmap.c                     |    2 
 src/mesa/state_tracker/st_glsl_to_tgsi.cpp                 |   14 +
 src/mesa/state_tracker/st_texture.c                        |    6 
 src/mesa/state_tracker/st_texture.h                        |    3 
 src/mesa/state_tracker/st_vdpau.c                          |    4 
 29 files changed, 272 insertions(+), 74 deletions(-)

New commits:
commit ce2310b5f549556fbeabfdfbb2c08787b0ae42db
Author: Sven Joachim <svenjoac@gmx.de>
Date:   Sun Oct 26 08:25:45 2014 +0100

    New upstream release

diff --git a/debian/changelog b/debian/changelog
index 802de92..e979ed3 100644
--- a/debian/changelog
+++ b/debian/changelog
@@ -1,3 +1,9 @@
+mesa (10.3.2-1) UNRELEASED; urgency=medium
+
+  * New upstream stable release.
+
+ -- Sven Joachim <svenjoac@gmx.de>  Sun, 26 Oct 2014 08:25:29 +0100
+
 mesa (10.3.1-1) unstable; urgency=medium
 
   * Build libgbm on kfreebsd (fixes FTBFS).

commit 3b6a4758fa8958db4b76e6d7efccc93b12b1da06
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date:   Sat Oct 25 00:33:38 2014 +0000

    Add release notes for the 10.3.2 release
    
    Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>

diff --git a/docs/relnotes/10.3.2.html b/docs/relnotes/10.3.2.html
new file mode 100644
index 0000000..657c0ac
--- /dev/null
+++ b/docs/relnotes/10.3.2.html
@@ -0,0 +1,113 @@
+<!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 10.3.2 Release Notes / October 24, 2014</h1>
+
+<p>
+Mesa 10.3.2 is a bug fix release which fixes bugs found since the 10.3 release.
+</p>
+<p>
+Mesa 10.3.2 implements the OpenGL 3.3 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 3.3.  OpenGL
+3.3 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=54372";>Bug 54372</a> - GLX_INTEL_swap_event crashes driver when swapping window buffers</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=81680";>Bug 81680</a> - [r600g] Firefox crashes with hardware acceleration turned on</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84140";>Bug 84140</a> - mplayer crashes playing some files using vdpau output</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=84662";>Bug 84662</a> - Long pauses with Unreal demo Elemental on R9270X since : Always flush the HDP cache before submitting a CS to the GPU</li>
+
+<li><a href="https://bugs.freedesktop.org/show_bug.cgi?id=85267";>Bug 85267</a> - vlc crashes with vdpau (Radeon 3850HD) [r600]</li>
+
+</ul>
+
+<h2>Changes</h2>
+
+<p>Brian Paul (3):</p>
+<ul>
+  <li>mesa: fix spurious wglGetProcAddress / GL_INVALID_OPERATION error</li>
+  <li>st/wgl: add WINAPI qualifiers on wgl function typedefs</li>
+  <li>glsl: fix several use-after-free bugs</li>
+</ul>
+
+<p>Daniel Manjarres (1):</p>
+<ul>
+  <li>glx: Fix glxUseXFont for glxWindow and glxPixmaps</li>
+</ul>
+
+<p>Dave Airlie (1):</p>
+<ul>
+  <li>mesa: fix GetTexImage for 1D array depth textures</li>
+</ul>
+
+<p>Emil Velikov (2):</p>
+<ul>
+  <li>docs: Add sha256 sums for the 10.3.1 release</li>
+  <li>Update VERSION to 10.3.2</li>
+</ul>
+
+<p>Ilia Mirkin (4):</p>
+<ul>
+  <li>gm107/ir: add dnz emission for fmul</li>
+  <li>gk110/ir: add dnz flag emission for fmul/fmad</li>
+  <li>nouveau: 3d textures are unsupported, limit 3d levels to 1</li>
+  <li>st/gbm: fix order of arguments passed to is_format_supported</li>
+</ul>
+
+<p>Kenneth Graunke (3):</p>
+<ul>
+  <li>i965: Add a BRW_MOCS_PTE #define.</li>
+  <li>i965: Use BDW_MOCS_PTE for renderbuffers.</li>
+  <li>i965: Fix register write checks.</li>
+</ul>
+
+<p>Marek Olšák (2):</p>
+<ul>
+  <li>st/mesa: use pipe_sampler_view_release for releasing sampler views</li>
+  <li>glsl_to_tgsi: fix the value of gl_FrontFacing with native integers</li>
+</ul>
+
+<p>Michel Dänzer (4):</p>
+<ul>
+  <li>radeonsi: Clear sampler view flags when binding a buffer</li>
+  <li>r600g,radeonsi: Always use GTT again for PIPE_USAGE_STREAM buffers</li>
+  <li>winsys/radeon: Use separate caching buffer manager for each set of flags</li>
+  <li>r600g: Drop references to destroyed blend state</li>
+</ul>
+
+</div>
+</body>
+</html>

commit e0aaa9591b2ad94d2bf4efb5a83538cea800b614
Author: Emil Velikov <emil.l.velikov@gmail.com>
Date:   Sat Oct 25 00:27:57 2014 +0000

    Update VERSION to 10.3.2
    
    Signed-off-by: Emil Velikov <emil.l.velikov@gmail.com>

diff --git a/VERSION b/VERSION
index a936832..15d0c6b 100644
--- a/VERSION
+++ b/VERSION
@@ -1 +1 @@
-10.3.1
+10.3.2

commit 724f71ef3905289eee7b45955243fdc7dc5f1251
Author: Michel Dänzer <michel.daenzer@amd.com>
Date:   Tue Oct 21 12:40:15 2014 +0900

    r600g: Drop references to destroyed blend state
    
    Fixes use-after-free when the currently bound blend state is destroyed.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=85267
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=84140
    
    Reviewed-by: Marek Olšák <marek.olsak@amd.com>
    Tested-by: Dieter Nützel <Dieter@nuetzel-hh.de>
    
    Cc: mesa-stable@lists.freedesktop.org
    (cherry picked from commit ae879718c4086fc5905070e7f26dfa2757df0c86)

diff --git a/src/gallium/drivers/r600/r600_state_common.c b/src/gallium/drivers/r600/r600_state_common.c
index d9174a5..a050a53 100644
--- a/src/gallium/drivers/r600/r600_state_common.c
+++ b/src/gallium/drivers/r600/r600_state_common.c
@@ -158,8 +158,10 @@ static void r600_bind_blend_state(struct pipe_context *ctx, void *state)
 	struct r600_context *rctx = (struct r600_context *)ctx;
 	struct r600_blend_state *blend = (struct r600_blend_state *)state;
 
-	if (blend == NULL)
+	if (blend == NULL) {
+		r600_set_cso_state_with_cb(&rctx->blend_state, NULL, NULL);
 		return;
+	}
 
 	r600_bind_blend_state_internal(rctx, blend, rctx->force_blend_disable);
 }
@@ -447,8 +449,13 @@ static void r600_delete_sampler_state(struct pipe_context *ctx, void *state)
 
 static void r600_delete_blend_state(struct pipe_context *ctx, void *state)
 {
+	struct r600_context *rctx = (struct r600_context *)ctx;
 	struct r600_blend_state *blend = (struct r600_blend_state*)state;
 
+	if (rctx->blend_state.cso == state) {
+		ctx->bind_blend_state(ctx, NULL);
+	}
+
 	r600_release_command_buffer(&blend->buffer);
 	r600_release_command_buffer(&blend->buffer_no_blend);
 	FREE(blend);

commit 6fa07d1d4842169906155c6de58475fefe780204
Author: Marek Olšák <marek.olsak@amd.com>
Date:   Thu Oct 16 16:21:54 2014 +0200

    glsl_to_tgsi: fix the value of gl_FrontFacing with native integers
    
    We must convert it to boolean from the DX9 float encoding that Gallium
    specifies.
    
    Later, we should probably define that FACE should be 0 or ~0 if native
    integers are supported.
    
    Cc: 10.2 10.3 <mesa-stable@lists.freedesktop.org>
    Reviewed-by: Eric Anholt <eric@anholt.net>
    (cherry picked from commit 9ec305ead7750c7f91c79b043584c1997bacd9a7)

diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
index 34f7e9c..57416d1 100644
--- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
@@ -4818,15 +4818,19 @@ emit_wpos(struct st_context *st,
  * saturating the value to [0,1] does the job.
  */
 static void
-emit_face_var(struct st_translate *t)
+emit_face_var(struct gl_context *ctx, struct st_translate *t)
 {
    struct ureg_program *ureg = t->ureg;
    struct ureg_dst face_temp = ureg_DECL_temporary(ureg);
    struct ureg_src face_input = t->inputs[t->inputMapping[VARYING_SLOT_FACE]];
 
-   /* MOV_SAT face_temp, input[face] */
-   face_temp = ureg_saturate(face_temp);
-   ureg_MOV(ureg, face_temp, face_input);
+   if (ctx->Const.NativeIntegers) {
+      ureg_FSGE(ureg, face_temp, face_input, ureg_imm1f(ureg, 0));
+   }
+   else {
+      /* MOV_SAT face_temp, input[face] */
+      ureg_MOV(ureg, ureg_saturate(face_temp), face_input);
+   }
 
    /* Use face_temp as face input from here on: */
    t->inputs[t->inputMapping[VARYING_SLOT_FACE]] = ureg_src(face_temp);
@@ -4946,7 +4950,7 @@ st_translate_program(
       }
 
       if (proginfo->InputsRead & VARYING_BIT_FACE)
-         emit_face_var(t);
+         emit_face_var(ctx, t);
 
       /*
        * Declare output attributes.

commit 8f6f6a28fac7d3c3dc14884fce53129b9ce89de7
Author: Brian Paul <brianp@vmware.com>
Date:   Fri Oct 17 13:31:53 2014 -0600

    glsl: fix several use-after-free bugs
    
    The get_variable_being_redeclared() function can free the 'var' argument.
    Thereafter, we cannot assume that 'var' is a valid  pointer.  This patch
    replaces 'var->name' with 'earlier->name' in two places and calls
    is_gl_identifier(var->name) before 'var' might get freed.
    
    This fixes several piglit GLSL crashes, including:
    spec/glsl-1.50/execution/geometry/clip-distance-in-param
    spec/glsl-1.50/execution/geometry/clip-distance-bulk-copy
    spec/glsl-1.50/compiler/gs-redeclares-pervertex-out-before-global-redeclaration.geom
    
    I'm not sure why these were not spotted sooner.
    A similar bug was previously fixed by f9cecca7a.
    
    Cc: <mesa-stable@lists.freedesktop.org>
    Reviewed-by: Chris Forbes <chrisf@ijw.co.nz>
    (cherry picked from commit 14379a0644ed69c5b7a6c6150ae91eba6f316e33)

diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp
index 30b02d0..e238cd1 100644
--- a/src/glsl/ast_to_hir.cpp
+++ b/src/glsl/ast_to_hir.cpp
@@ -3760,7 +3760,7 @@ ast_declarator_list::hir(exec_list *instructions,
              earlier->data.how_declared == ir_var_declared_in_block) {
             _mesa_glsl_error(&loc, state,
                              "`%s' has already been redeclared using "
-                             "gl_PerVertex", var->name);
+                             "gl_PerVertex", earlier->name);
          }
          earlier->data.how_declared = ir_var_declared_normally;
       }
@@ -5674,17 +5674,21 @@ ast_interface_block::hir(exec_list *instructions,
 
          var->data.stream = this->layout.stream;
 
+         /* Examine var name here since var may get deleted in the next call */
+         bool var_is_gl_id = is_gl_identifier(var->name);
+
          if (redeclaring_per_vertex) {
             ir_variable *earlier =
                get_variable_being_redeclared(var, loc, state,
                                              true /* allow_all_redeclarations */);
-            if (!is_gl_identifier(var->name) || earlier == NULL) {
+            if (!var_is_gl_id || earlier == NULL) {
                _mesa_glsl_error(&loc, state,
                                 "redeclaration of gl_PerVertex can only "
                                 "include built-in variables");
             } else if (earlier->data.how_declared == ir_var_declared_normally) {
                _mesa_glsl_error(&loc, state,
-                                "`%s' has already been redeclared", var->name);
+                                "`%s' has already been redeclared",
+                                earlier->name);
             } else {
                earlier->data.how_declared = ir_var_declared_in_block;
                earlier->reinit_interface_type(block_type);

commit 10d82870743441b224fba36475221cea1cbbd966
Author: Marek Olšák <marek.olsak@amd.com>
Date:   Thu Oct 16 23:19:59 2014 +0200

    st/mesa: use pipe_sampler_view_release for releasing sampler views
    
    This fixes a crash when exiting Firefox. I have really no idea how Firefox
    does it. It seems to involve multiple contexts and multithreading.
    
    v2: added an XXX comment
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=81680
    
    Acked by Christian König.
    Cc: 10.2 10.3 <mesa-stable@lists.freedesktop.org>
    Tested-by: Benjamin Bellec <b.bellec@gmail.com>
    
    (cherry picked from commit 833d698ad5d7dc7598b798653e1413f4379ec476)

diff --git a/src/mesa/state_tracker/st_cb_eglimage.c b/src/mesa/state_tracker/st_cb_eglimage.c
index 34eb809..8531afb 100644
--- a/src/mesa/state_tracker/st_cb_eglimage.c
+++ b/src/mesa/state_tracker/st_cb_eglimage.c
@@ -96,6 +96,7 @@ st_bind_surface(struct gl_context *ctx, GLenum target,
                 struct gl_texture_image *texImage,
                 struct pipe_surface *ps)
 {
+   struct st_context *st = st_context(ctx);
    struct st_texture_object *stObj;
    struct st_texture_image *stImage;
    GLenum internalFormat;
@@ -124,7 +125,7 @@ st_bind_surface(struct gl_context *ctx, GLenum target,
 
    /* FIXME create a non-default sampler view from the pipe_surface? */
    pipe_resource_reference(&stObj->pt, ps->texture);
-   st_texture_release_all_sampler_views(stObj);
+   st_texture_release_all_sampler_views(st, stObj);
    pipe_resource_reference(&stImage->pt, stObj->pt);
 
    stObj->width0 = ps->width;
diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
index ad14bd9..82a28d5 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -152,10 +152,11 @@ static void
 st_DeleteTextureObject(struct gl_context *ctx,
                        struct gl_texture_object *texObj)
 {
+   struct st_context *st = st_context(ctx);
    struct st_texture_object *stObj = st_texture_object(texObj);
 
    pipe_resource_reference(&stObj->pt, NULL);
-   st_texture_release_all_sampler_views(stObj);
+   st_texture_release_all_sampler_views(st, stObj);
    st_texture_free_sampler_views(stObj);
    _mesa_delete_texture_object(ctx, texObj);
 }
@@ -512,7 +513,7 @@ st_AllocTextureImageBuffer(struct gl_context *ctx,
    /* The parent texture object does not have space for this image */
 
    pipe_resource_reference(&stObj->pt, NULL);
-   st_texture_release_all_sampler_views(stObj);
+   st_texture_release_all_sampler_views(st, stObj);
 
    if (!guess_and_alloc_texture(st, stObj, stImage)) {
       /* Probably out of memory.
@@ -1564,13 +1565,13 @@ st_finalize_texture(struct gl_context *ctx,
 
       if (!st_obj) {
          pipe_resource_reference(&stObj->pt, NULL);
-         st_texture_release_all_sampler_views(stObj);
+         st_texture_release_all_sampler_views(st, stObj);
          return GL_TRUE;
       }
 
       if (st_obj->buffer != stObj->pt) {
          pipe_resource_reference(&stObj->pt, st_obj->buffer);
-         st_texture_release_all_sampler_views(stObj);
+         st_texture_release_all_sampler_views(st, stObj);
          stObj->width0 = stObj->pt->width0 / _mesa_get_format_bytes(tObj->_BufferObjectFormat);
          stObj->height0 = 1;
          stObj->depth0 = 1;
@@ -1591,7 +1592,7 @@ st_finalize_texture(struct gl_context *ctx,
        firstImage->pt != stObj->pt &&
        (!stObj->pt || firstImage->pt->last_level >= stObj->pt->last_level)) {
       pipe_resource_reference(&stObj->pt, firstImage->pt);
-      st_texture_release_all_sampler_views(stObj);
+      st_texture_release_all_sampler_views(st, stObj);
    }
 
    /* If this texture comes from a window system, there is nothing else to do. */
@@ -1639,7 +1640,7 @@ st_finalize_texture(struct gl_context *ctx,
           * gallium texture now.  We'll make a new one below.
           */
          pipe_resource_reference(&stObj->pt, NULL);
-         st_texture_release_all_sampler_views(stObj);
+         st_texture_release_all_sampler_views(st, stObj);
          st->dirty.st |= ST_NEW_FRAMEBUFFER;
       }
    }
diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c
index 18cf504..26e1c21 100644
--- a/src/mesa/state_tracker/st_gen_mipmap.c
+++ b/src/mesa/state_tracker/st_gen_mipmap.c
@@ -124,7 +124,7 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
 
       /* release the old tex (will likely be freed too) */
       pipe_resource_reference(&oldTex, NULL);
-      st_texture_release_all_sampler_views(stObj);
+      st_texture_release_all_sampler_views(st, stObj);
    }
    else {
       /* Make sure that the base texture image data is present in the
diff --git a/src/mesa/state_tracker/st_texture.c b/src/mesa/state_tracker/st_texture.c
index af9b767..39b133e 100644
--- a/src/mesa/state_tracker/st_texture.c
+++ b/src/mesa/state_tracker/st_texture.c
@@ -507,12 +507,14 @@ st_texture_release_sampler_view(struct st_context *st,
 }
 
 void
-st_texture_release_all_sampler_views(struct st_texture_object *stObj)
+st_texture_release_all_sampler_views(struct st_context *st,
+                                     struct st_texture_object *stObj)
 {
    GLuint i;
 
+   /* XXX This should use sampler_views[i]->pipe, not st->pipe */
    for (i = 0; i < stObj->num_sampler_views; ++i)
-      pipe_sampler_view_reference(&stObj->sampler_views[i], NULL);
+      pipe_sampler_view_release(st->pipe, &stObj->sampler_views[i]);
 }
 
 
diff --git a/src/mesa/state_tracker/st_texture.h b/src/mesa/state_tracker/st_texture.h
index ce1cf8b..d66afcb 100644
--- a/src/mesa/state_tracker/st_texture.h
+++ b/src/mesa/state_tracker/st_texture.h
@@ -255,7 +255,8 @@ st_texture_release_sampler_view(struct st_context *st,
                                 struct st_texture_object *stObj);
 
 extern void
-st_texture_release_all_sampler_views(struct st_texture_object *stObj);
+st_texture_release_all_sampler_views(struct st_context *st,
+                                     struct st_texture_object *stObj);
 
 void
 st_texture_free_sampler_views(struct st_texture_object *stObj);
diff --git a/src/mesa/state_tracker/st_vdpau.c b/src/mesa/state_tracker/st_vdpau.c
index 8c10cda..6ccaf3e 100644
--- a/src/mesa/state_tracker/st_vdpau.c
+++ b/src/mesa/state_tracker/st_vdpau.c
@@ -139,7 +139,7 @@ st_vdpau_map_surface(struct gl_context *ctx, GLenum target, GLenum access,
                               texFormat);
 
    pipe_resource_reference(&stObj->pt, res);
-   st_texture_release_all_sampler_views(stObj);
+   st_texture_release_all_sampler_views(st, stObj);
    pipe_resource_reference(&stImage->pt, res);
 
    u_sampler_view_default_template(&templ, res, res->format);
@@ -172,7 +172,7 @@ st_vdpau_unmap_surface(struct gl_context *ctx, GLenum target, GLenum access,
    struct st_texture_image *stImage = st_texture_image(texImage);
 
    pipe_resource_reference(&stObj->pt, NULL);
-   st_texture_release_all_sampler_views(stObj);
+   st_texture_release_all_sampler_views(st, stObj);
    pipe_resource_reference(&stImage->pt, NULL);
 
    _mesa_dirty_texobj(ctx, texObj);

commit c759d1b6bfbc15b044ef3f7cd590b6647c3670df
Author: Michel Dänzer <michel.daenzer@amd.com>
Date:   Wed Oct 8 16:34:46 2014 +0900

    winsys/radeon: Use separate caching buffer manager for each set of flags
    
    Otherwise the caching buffer manager may return a buffer which was created
    with a different set of flags, which can cause trouble.
    
    Cc: mesa-stable@lists.freedesktop.org
    Reviewed-by: Marek Olšák <marek.olsak@amd.com>
    (cherry picked from commit 3ede67a4c6d77892296ffc5568ddf3accaa1af99)
    
    Conflicts:
    	src/gallium/winsys/radeon/drm/radeon_drm_winsys.c

diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
index 73f8d38..63bcb31 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_bo.c
@@ -811,17 +811,12 @@ radeon_winsys_bo_create(struct radeon_winsys *rws,
     desc.flags = flags;
 
     /* Assign a buffer manager. */
+    assert(flags < RADEON_NUM_CACHE_MANAGERS);
     if (use_reusable_pool) {
-        if (domain == RADEON_DOMAIN_VRAM) {
-            if (flags & RADEON_FLAG_GTT_WC)
-                provider = ws->cman_vram_gtt_wc;
-            else
-                provider = ws->cman_vram;
-        } else if (flags & RADEON_FLAG_GTT_WC) {
-            provider = ws->cman_gtt_wc;
-        } else {
-            provider = ws->cman_gtt;
-        }
+        if (domain == RADEON_DOMAIN_VRAM)
+            provider = ws->cman_vram[flags];
+        else
+            provider = ws->cman_gtt[flags];
     } else {
         provider = ws->kman;
     }
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
index 820cc90..febef03 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.c
@@ -441,6 +441,7 @@ static boolean do_winsys_init(struct radeon_drm_winsys *ws)
 static void radeon_winsys_destroy(struct radeon_winsys *rws)
 {
     struct radeon_drm_winsys *ws = (struct radeon_drm_winsys*)rws;
+    int i;
 
     if (ws->thread) {
         ws->kill_thread = 1;
@@ -453,10 +454,10 @@ static void radeon_winsys_destroy(struct radeon_winsys *rws)
     pipe_mutex_destroy(ws->cmask_owner_mutex);
     pipe_mutex_destroy(ws->cs_stack_lock);
 
-    ws->cman_vram->destroy(ws->cman_vram);
-    ws->cman_vram_gtt_wc->destroy(ws->cman_vram_gtt_wc);
-    ws->cman_gtt->destroy(ws->cman_gtt);
-    ws->cman_gtt_wc->destroy(ws->cman_gtt_wc);
+    for (i = 0; i < RADEON_NUM_CACHE_MANAGERS; i++) {
+        ws->cman_gtt[i]->destroy(ws->cman_gtt[i]);
+        ws->cman_vram[i]->destroy(ws->cman_vram[i]);
+    }
     ws->kman->destroy(ws->kman);
     if (ws->gen >= DRV_R600) {
         radeon_surface_manager_free(ws->surf_man);
@@ -643,6 +644,7 @@ PUBLIC struct radeon_winsys *
 radeon_drm_winsys_create(int fd, radeon_screen_create_t screen_create)
 {
     struct radeon_drm_winsys *ws;
+    int i;
 
     pipe_mutex_lock(fd_tab_mutex);
     if (!fd_tab) {
@@ -671,18 +673,16 @@ radeon_drm_winsys_create(int fd, radeon_screen_create_t screen_create)
     ws->kman = radeon_bomgr_create(ws);
     if (!ws->kman)
         goto fail;
-    ws->cman_vram = pb_cache_manager_create(ws->kman, 1000000, 2.0f, 0);
-    if (!ws->cman_vram)
-        goto fail;
-    ws->cman_vram_gtt_wc = pb_cache_manager_create(ws->kman, 1000000, 2.0f, 0);
-    if (!ws->cman_vram_gtt_wc)
-        goto fail;
-    ws->cman_gtt = pb_cache_manager_create(ws->kman, 1000000, 2.0f, 0);
-    if (!ws->cman_gtt)
-        goto fail;
-    ws->cman_gtt_wc = pb_cache_manager_create(ws->kman, 1000000, 2.0f, 0);
-    if (!ws->cman_gtt_wc)
-        goto fail;
+
+    for (i = 0; i < RADEON_NUM_CACHE_MANAGERS; i++) {
+        ws->cman_vram[i] = pb_cache_manager_create(ws->kman, 1000000, 2.0f, 0);
+        if (!ws->cman_vram[i])
+            goto fail;
+
+        ws->cman_gtt[i] = pb_cache_manager_create(ws->kman, 1000000, 2.0f, 0);
+        if (!ws->cman_gtt[i])
+            goto fail;
+    }
 
     if (ws->gen >= DRV_R600) {
         ws->surf_man = radeon_surface_manager_new(fd);
@@ -737,14 +737,12 @@ radeon_drm_winsys_create(int fd, radeon_screen_create_t screen_create)
 
 fail:
     pipe_mutex_unlock(fd_tab_mutex);
-    if (ws->cman_gtt)
-        ws->cman_gtt->destroy(ws->cman_gtt);
-    if (ws->cman_gtt_wc)
-        ws->cman_gtt_wc->destroy(ws->cman_gtt_wc);
-    if (ws->cman_vram)
-        ws->cman_vram->destroy(ws->cman_vram);
-    if (ws->cman_vram_gtt_wc)
-        ws->cman_vram_gtt_wc->destroy(ws->cman_vram_gtt_wc);
+    for (i = 0; i < RADEON_NUM_CACHE_MANAGERS; i++) {
+        if (ws->cman_gtt[i])
+            ws->cman_gtt[i]->destroy(ws->cman_gtt[i]);
+        if (ws->cman_vram[i])
+            ws->cman_vram[i]->destroy(ws->cman_vram[i]);
+    }
     if (ws->kman)
         ws->kman->destroy(ws->kman);
     if (ws->surf_man)
diff --git a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h
index aebc391..a2adf4b 100644
--- a/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h
+++ b/src/gallium/winsys/radeon/drm/radeon_drm_winsys.h
@@ -41,6 +41,8 @@ enum radeon_generation {
     DRV_SI
 };
 
+#define RADEON_NUM_CACHE_MANAGERS 8
+
 struct radeon_drm_winsys {
     struct radeon_winsys base;
     struct pipe_reference reference;
@@ -58,10 +60,8 @@ struct radeon_drm_winsys {
     uint32_t accel_working2;
 
     struct pb_manager *kman;
-    struct pb_manager *cman_vram;
-    struct pb_manager *cman_vram_gtt_wc;
-    struct pb_manager *cman_gtt;
-    struct pb_manager *cman_gtt_wc;
+    struct pb_manager *cman_vram[RADEON_NUM_CACHE_MANAGERS];
+    struct pb_manager *cman_gtt[RADEON_NUM_CACHE_MANAGERS];
     struct radeon_surface_manager *surf_man;
 
     uint32_t num_cpus;      /* Number of CPUs. */

commit b37c1d46424d42ac1f75cafeb05e476871762cf3
Author: Ilia Mirkin <imirkin@alum.mit.edu>
Date:   Mon Oct 13 22:39:48 2014 -0400

    st/gbm: fix order of arguments passed to is_format_supported
    
    Reported by Coverity
    
    Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
    Reviewed-by: Michel Dänzer <michel.daenzer@amd.com>
    Cc: mesa-stable@lists.freedesktop.org
    (cherry picked from commit 742158b51ee9814e93a913cf020fba10608d73be)

diff --git a/src/gallium/state_trackers/gbm/gbm_drm.c b/src/gallium/state_trackers/gbm/gbm_drm.c
index 95b07ef..d766535 100644
--- a/src/gallium/state_trackers/gbm/gbm_drm.c
+++ b/src/gallium/state_trackers/gbm/gbm_drm.c
@@ -85,7 +85,7 @@ gbm_gallium_drm_is_format_supported(struct gbm_device *gbm,
    if (pf == PIPE_FORMAT_NONE)
       return 0;
 
-   if (!gdrm->screen->is_format_supported(gdrm->screen, PIPE_TEXTURE_2D, pf, 0,
+   if (!gdrm->screen->is_format_supported(gdrm->screen, pf, PIPE_TEXTURE_2D, 0,
                                           gbm_usage_to_gallium(usage)))
       return 0;
 

commit fb20a5aa987dbd8f9c150e5ded01f0507dff0116
Author: Ilia Mirkin <imirkin@alum.mit.edu>
Date:   Sun Oct 5 12:35:51 2014 -0400

    nouveau: 3d textures are unsupported, limit 3d levels to 1
    
    Ideally there would be a swrast fallback, but the driver isn't ready for
    that. This should avoid crashes if someone tries to use 3d textures
    though.
    
    Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
    Reviewed-by: Francisco Jerez <currojerez@riseup.net>
    Cc: mesa-stable@lists.freedesktop.org
    (cherry picked from commit 5524af81365d51757ef68a8e62dbd426d0b07184)

diff --git a/src/mesa/drivers/dri/nouveau/nouveau_context.c b/src/mesa/drivers/dri/nouveau/nouveau_context.c
index f8c8dc3..5886a94 100644
--- a/src/mesa/drivers/dri/nouveau/nouveau_context.c
+++ b/src/mesa/drivers/dri/nouveau/nouveau_context.c
@@ -189,6 +189,9 @@ nouveau_context_init(struct gl_context *ctx, gl_api api,
 	ctx->Extensions.NV_texture_env_combine4 = true;
 	ctx->Const.MaxColorAttachments = 1;
 
+	/* This effectively disables 3D textures */
+	ctx->Const.Max3DTextureLevels = 1;
+
 	return GL_TRUE;
 }
 

commit 4f33ded115bb01f6417d12e2b8eadc7b86f24f96
Author: Daniel Manjarres <danmanj@gmail.com>
Date:   Sun Jun 22 09:47:58 2014 -0700

    glx: Fix glxUseXFont for glxWindow and glxPixmaps
    
    The current implementation of glxUseXFont requires creating
    a temporary pixmap and graphics context, which requires a real
    old-school X11 Window, not a glxDrawable. This patch changes
    things so that glxUseXFont will also accept a glxWindow or
    glxPixmap, and lookup the underlying X11 Drawable. Without
    this patch glxUseXFont generates a giant stream of Xerrors
    about bad drawables and bad graphics contexts.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=54372
    
    Cc: mesa-stable@lists.freedesktop.org
    Reviewed-by: Brian Paul <brianp@vmware.com>
    (cherry picked from commit 291be28476ea60c6fb1eb2a882e2e25def5d3735)

diff --git a/src/glx/xfont.c b/src/glx/xfont.c
index 316c585..a086b7a 100644
--- a/src/glx/xfont.c
+++ b/src/glx/xfont.c
@@ -221,6 +221,7 @@ DRI_glXUseXFont(struct glx_context *CC, Font font, int first, int count, int lis
    XGCValues values;
    unsigned long valuemask;
    XFontStruct *fs;
+   __GLXDRIdrawable *glxdraw;
 
    GLint swapbytes, lsbfirst, rowlength;
    GLint skiprows, skippixels, alignment;
@@ -233,6 +234,10 @@ DRI_glXUseXFont(struct glx_context *CC, Font font, int first, int count, int lis
    dpy = CC->currentDpy;
    win = CC->currentDrawable;
 
+   glxdraw = GetGLXDRIDrawable(CC->currentDpy, CC->currentDrawable);
+   if (glxdraw)
+      win = glxdraw->xDrawable;
+
    fs = XQueryFont(dpy, font);
    if (!fs) {
       __glXSetError(CC, GL_INVALID_VALUE);

commit 13a4fd24305eb692492714a6706e311fcc3c0629
Author: Kenneth Graunke <kenneth@whitecape.org>
Date:   Mon Sep 29 17:00:51 2014 -0700

    i965: Fix register write checks.
    
    When mapping the buffer a second time, we need to use the new pointer,
    not the one from the previous mapping.  Otherwise, we will most likely
    crash.
    
    Apparently, we've just been getting lucky and getting the same
    bo->virtual pointer in both cases.  libdrm probably has a hand in that.
    
    Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
    Reviewed-by: Anuj Phogat <anuj.phogat@gmail.com>
    Cc: mesa-stable@lists.freedesktop.org
    (cherry picked from commit 94841b6d5dac6dcb445a30f083ec6e9858ad2f7d)

diff --git a/src/mesa/drivers/dri/i965/intel_extensions.c b/src/mesa/drivers/dri/i965/intel_extensions.c
index 046d2a1..f3aa37f 100644
--- a/src/mesa/drivers/dri/i965/intel_extensions.c
+++ b/src/mesa/drivers/dri/i965/intel_extensions.c
@@ -87,6 +87,7 @@ can_do_pipelined_register_writes(struct brw_context *brw)
 
    /* Check whether the value got written. */
    drm_intel_bo_map(brw->batch.workaround_bo, false);
+   data = brw->batch.workaround_bo->virtual;
    bool success = data[offset] == expected_value;
    drm_intel_bo_unmap(brw->batch.workaround_bo);
 
@@ -145,6 +146,7 @@ can_write_oacontrol(struct brw_context *brw)
 
    /* Check whether the value got written. */
    drm_intel_bo_map(brw->batch.workaround_bo, false);
+   data = brw->batch.workaround_bo->virtual;
    bool success = data[offset] == expected_value;
    drm_intel_bo_unmap(brw->batch.workaround_bo);
 

commit 5e6ee119c014b2b53a33e48ea2e84ee37d2197bd
Author: Kenneth Graunke <kenneth@whitecape.org>
Date:   Tue Sep 30 01:15:56 2014 -0700

    i965: Use BDW_MOCS_PTE for renderbuffers.
    
    Write-back caching cannot be used for buffers being scanned out by the
    display engine; surfaces used for scan-out must be write-through or
    uncached.  I originally chose WT for render targets because it works in
    all cases.  However, we really want to use write-back caching where
    possible, as it is more efficient.
    
    Most renderbuffers are not used for scanout - off-screen FBOs certainly
    are fine, and non-pageflipped backbuffers should be fine as well.  So
    in most cases WB will work.  However, we don't know what will be used
    for scan-out, so we instead simply use the PTE value specified by the
    kernel, as it knows these things.
    
    This matches our MOCS choice on Haswell.
    
    Fixes performance regressions since commit ee4484be3dc827cf15bcf109f5
    in a microbenchmark (spotted by Eero Tamminen).  Improves performance
    in GLBenchmark 2.7/EgyptHD by 7.44362% +/- 0.496939% (n=55) on a
    Broadwell GT2.  Improves performance in a bunch of other microbenchmarks
    by ~15% or so.
    
    Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
    Reported-by: Eero Tamminen <eero.t.tamminen@intel.com>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
    Cc: mesa-stable@lists.freedesktop.org
    (cherry picked from commit b7844d12487dbac702ecd734faeffa6fe1a61a83)

diff --git a/src/mesa/drivers/dri/i965/gen8_surface_state.c b/src/mesa/drivers/dri/i965/gen8_surface_state.c
index 40eb2ea..6dd343f 100644
--- a/src/mesa/drivers/dri/i965/gen8_surface_state.c
+++ b/src/mesa/drivers/dri/i965/gen8_surface_state.c
@@ -377,7 +377,7 @@ gen8_update_renderbuffer_surface(struct brw_context *brw,
              horizontal_alignment(mt) |
              surface_tiling_mode(tiling);
 
-   surf[1] = SET_FIELD(BDW_MOCS_WT, GEN8_SURFACE_MOCS) | mt->qpitch >> 2;
+   surf[1] = SET_FIELD(BDW_MOCS_PTE, GEN8_SURFACE_MOCS) | mt->qpitch >> 2;
 
    surf[2] = SET_FIELD(width - 1, GEN7_SURFACE_WIDTH) |
              SET_FIELD(height - 1, GEN7_SURFACE_HEIGHT);

commit 85d7eb730a1cbfbd4c9b2ecd017f6b8dab40b20d
Author: Kenneth Graunke <kenneth@whitecape.org>
Date:   Tue Sep 30 01:15:55 2014 -0700

    i965: Add a BRW_MOCS_PTE #define.
    
    Like BDW_MOCS_WB and BDW_MOCS_WT, this specifies that we want to use all
    three caches (L3, LLC, and eLLC where available), but leaves the LLC
    caching mode up to the kernel's page table entry.
    
    This allows the kernel to pick WB/WT/UC based on whether it's using a
    buffer for scanout.
    
    Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
    Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
    Reviewed-by: Kristian Høgsberg <krh@bitplanet.net>
    Cc: mesa-stable@lists.freedesktop.org
    (cherry picked from commit d489a8a73d273e9042b3de49085576c2acd5153a)

diff --git a/src/mesa/drivers/dri/i965/brw_defines.h b/src/mesa/drivers/dri/i965/brw_defines.h
index 968aba1..9470fbc 100644
--- a/src/mesa/drivers/dri/i965/brw_defines.h
+++ b/src/mesa/drivers/dri/i965/brw_defines.h
@@ -2312,9 +2312,13 @@ enum brw_wm_barycentric_interp_mode {
 #define HSW_MOCS_WB_LLC_WB_ELLC         (2 << 1)
 #define HSW_MOCS_UC_LLC_WB_ELLC         (3 << 1)
 
-/* Broadwell: write-back or write-through; always use all the caches. */
-#define BDW_MOCS_WB 0x78
-#define BDW_MOCS_WT 0x58
+/* Broadwell: these defines always use all available caches (L3, LLC, eLLC),
+ * and let you force write-back (WB) or write-through (WT) caching, or leave
+ * it up to the page table entry (PTE) specified by the kernel.
+ */
+#define BDW_MOCS_WB  0x78
+#define BDW_MOCS_WT  0x58
+#define BDW_MOCS_PTE 0x18
 
 #include "intel_chipset.h"
 

commit 64c2bdc334ba472603b1e7cd2c3046cfbce285b6
Author: Michel Dänzer <michel.daenzer@amd.com>
Date:   Tue Aug 26 18:21:50 2014 +0900

    r600g,radeonsi: Always use GTT again for PIPE_USAGE_STREAM buffers
    
    Putting those in VRAM can cause long pauses due to buffers being moved
    into / out of VRAM.
    
    Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=84662
    Cc: mesa-stable@lists.freedesktop.org
    Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
    (cherry picked from commit 7b4276d7acf2e0f77044cb50caa6ad936fa78786)

diff --git a/src/gallium/drivers/radeon/r600_buffer_common.c b/src/gallium/drivers/radeon/r600_buffer_common.c
index ee05776..acdabc0 100644
--- a/src/gallium/drivers/radeon/r600_buffer_common.c
+++ b/src/gallium/drivers/radeon/r600_buffer_common.c
@@ -110,11 +110,13 @@ bool r600_init_resource(struct r600_common_screen *rscreen,
 	enum radeon_bo_flag flags = 0;
 
 	switch (res->b.b.usage) {
+	case PIPE_USAGE_STREAM:
+		flags = RADEON_FLAG_GTT_WC;
+		/* fall through */
 	case PIPE_USAGE_STAGING:
 		/* Transfers are likely to occur more often with these resources. */
 		res->domains = RADEON_DOMAIN_GTT;
 		break;
-	case PIPE_USAGE_STREAM:
 	case PIPE_USAGE_DYNAMIC:
 		/* Older kernels didn't always flush the HDP cache before
 		 * CS execution

commit 125cd86cd47a806e9a0825136f6147c02ab44c37
Author: Ilia Mirkin <imirkin@alum.mit.edu>
Date:   Sun Sep 28 12:07:03 2014 -0400

    gk110/ir: add dnz flag emission for fmul/fmad
    
    Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
    Cc: "10.2 10.3" <mesa-stable@lists.freedesktop.org>
    (cherry picked from commit c74be01e80fcdd7feabc0f27df4aebe66abb626e)

diff --git a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp
index 23a6ac7..d8adc93 100644
--- a/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp
+++ b/src/gallium/drivers/nouveau/codegen/nv50_ir_emit_gk110.cpp
@@ -140,6 +140,7 @@ private:
    code[(0x##b) / 32] |= 1 << ((0x##b) % 32)
 
 #define FTZ_(b) if (i->ftz) code[(0x##b) / 32] |= 1 << ((0x##b) % 32)
+#define DNZ_(b) if (i->dnz) code[(0x##b) / 32] |= 1 << ((0x##b) % 32)
 
 #define SAT_(b) if (i->saturate) code[(0x##b) / 32] |= 1 << ((0x##b) % 32)
 
@@ -464,6 +465,7 @@ CodeEmitterGK110::emitFMAD(const Instruction *i)
    SAT_(35);
    RND_(36, F);
    FTZ_(38);
+   DNZ_(39);
 
    bool neg1 = (i->src(0).mod ^ i->src(1).mod).neg();
 
@@ -487,6 +489,7 @@ CodeEmitterGK110::emitFMUL(const Instruction *i)
       emitForm_L(i, 0x200, 0x2, Modifier(0));
 
       FTZ_(38);
+      DNZ_(39);
       SAT_(3a);
       if (neg)
          code[1] ^= 1 << 22;
@@ -499,6 +502,7 @@ CodeEmitterGK110::emitFMUL(const Instruction *i)
 
       RND_(2a, F);
       FTZ_(2f);
+      DNZ_(30);
       SAT_(35);
 
       if (code[0] & 0x1) {

commit e3e68a36db7b8804155fc4dfe34508143532fcda
Author: Ilia Mirkin <imirkin@alum.mit.edu>
Date:   Sun Sep 28 01:52:11 2014 -0400

    gm107/ir: add dnz emission for fmul


Reply to: