mesa: Branch 'master' - 5 commits

Michel Daenzer daenzer at kemper.freedesktop.org
Thu Dec 14 10:04:32 UTC 2006


 progs/tests/mipmap_limits.c                       |    2 +-
 src/mesa/drivers/dri/i915tex/intel_batchbuffer.c  |   16 +++++++---------
 src/mesa/drivers/dri/i915tex/intel_tex_subimage.c |    3 +--
 src/mesa/drivers/dri/i915tex/intel_tex_validate.c |   15 ++++++++++++---
 src/mesa/main/texstore.c                          |    3 ++-
 5 files changed, 23 insertions(+), 16 deletions(-)

New commits:
diff-tree cc1afed6718882d13ab66ba0bbeaab6334e0629c (from 5f8a3e586f21219d02912635a93ce312bcf5987c)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Thu Dec 14 10:56:10 2006 +0100

    intel_finalize_mipmap_tree: Add more conditions for rebuilding mipmap trees.
    
    These are taken from the i965 driver and fix corruption of some mipmap levels
    under some circumsances with 945 chipsets at least.
    
    Also flush the batchbuffer after copying data between trees, or some apps fail
    an assertion elsewhere.

diff --git a/src/mesa/drivers/dri/i915tex/intel_tex_validate.c b/src/mesa/drivers/dri/i915tex/intel_tex_validate.c
index 5f82dfa..e73c9c2 100644
--- a/src/mesa/drivers/dri/i915tex/intel_tex_validate.c
+++ b/src/mesa/drivers/dri/i915tex/intel_tex_validate.c
@@ -2,6 +2,7 @@
 #include "macros.h"
 
 #include "intel_context.h"
+#include "intel_batchbuffer.h"
 #include "intel_mipmap_tree.h"
 #include "intel_tex.h"
 
@@ -155,9 +156,15 @@ intel_finalize_mipmap_tree(struct intel_
     * leaving the tree alone.
     */
    if (intelObj->mt &&
-       ((intelObj->mt->first_level > intelObj->firstLevel) ||
-        (intelObj->mt->last_level < intelObj->lastLevel) ||
-        (intelObj->mt->internal_format != firstImage->base.InternalFormat))) {
+       (intelObj->mt->target != intelObj->base.Target ||
+	intelObj->mt->internal_format != firstImage->base.InternalFormat ||
+	intelObj->mt->first_level != intelObj->firstLevel ||
+	intelObj->mt->last_level != intelObj->lastLevel ||
+	intelObj->mt->width0 != firstImage->base.Width ||
+	intelObj->mt->height0 != firstImage->base.Height ||
+	intelObj->mt->depth0 != firstImage->base.Depth ||
+	intelObj->mt->cpp != firstImage->base.TexFormat->TexelBytes ||
+	intelObj->mt->compressed != firstImage->base.IsCompressed)) {
       intel_miptree_release(intel, &intelObj->mt);
    }
 
@@ -198,6 +205,8 @@ intel_finalize_mipmap_tree(struct intel_
       }
    }
 
+   intel_batchbuffer_flush(intel->batch);
+
    return GL_TRUE;
 }
 
diff-tree 5f8a3e586f21219d02912635a93ce312bcf5987c (from 4cb09df015068f6d75e6457b6c98836dd58aaf29)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Thu Dec 14 10:49:26 2006 +0100

    intel_batchbuffer_flush: Don't assert cliprects when lock is not held.
    
    This is a legitimate situation when copying texture data between mipmap trees.

diff --git a/src/mesa/drivers/dri/i915tex/intel_batchbuffer.c b/src/mesa/drivers/dri/i915tex/intel_batchbuffer.c
index b4e0b74..be2750d 100644
--- a/src/mesa/drivers/dri/i915tex/intel_batchbuffer.c
+++ b/src/mesa/drivers/dri/i915tex/intel_batchbuffer.c
@@ -252,6 +252,7 @@ intel_batchbuffer_flush(struct intel_bat
 {
    struct intel_context *intel = batch->intel;
    GLuint used = batch->ptr - batch->map;
+   GLboolean was_locked = intel->locked;
 
    if (used == 0)
       return batch->last_fence;
@@ -278,17 +279,14 @@ intel_batchbuffer_flush(struct intel_bat
    /* TODO: Just pass the relocation list and dma buffer up to the
     * kernel.
     */
-   if (!intel->locked) {
-      assert(!(batch->flags & INTEL_BATCH_NO_CLIPRECTS));
-
+   if (!was_locked)
       LOCK_HARDWARE(intel);
-      do_flush_locked(batch, used, GL_FALSE, GL_TRUE);
+
+   do_flush_locked(batch, used, !(batch->flags & INTEL_BATCH_CLIPRECTS),
+		   GL_FALSE);
+
+   if (!was_locked)
       UNLOCK_HARDWARE(intel);
-   }
-   else {
-      GLboolean ignore_cliprects = !(batch->flags & INTEL_BATCH_CLIPRECTS);
-      do_flush_locked(batch, used, ignore_cliprects, GL_FALSE);
-   }
 
    /* Reset the buffer:
     */
diff-tree 4cb09df015068f6d75e6457b6c98836dd58aaf29 (from 9c09259b8bef8f120cc6f4bb1a44f0eae37d71b3)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Thu Dec 14 10:24:09 2006 +0100

    intelTexSubimage: Fix last parameter for intel_miptree_image_map().

diff --git a/src/mesa/drivers/dri/i915tex/intel_tex_subimage.c b/src/mesa/drivers/dri/i915tex/intel_tex_subimage.c
index 25a2dca..3935787 100644
--- a/src/mesa/drivers/dri/i915tex/intel_tex_subimage.c
+++ b/src/mesa/drivers/dri/i915tex/intel_tex_subimage.c
@@ -50,7 +50,6 @@ intelTexSubimage(GLcontext * ctx,
 {
    struct intel_context *intel = intel_context(ctx);
    struct intel_texture_image *intelImage = intel_texture_image(texImage);
-   GLuint dstImageStride;
    GLuint dstRowStride;
 
    DBG("%s target %s level %d offset %d,%d %dx%d\n", __FUNCTION__,
@@ -79,7 +78,7 @@ intelTexSubimage(GLcontext * ctx,
                                                intelImage->face,
                                                intelImage->level,
                                                &dstRowStride,
-                                               &dstImageStride);
+                                               texImage->ImageOffsets);
 
    assert(dstRowStride);
 
diff-tree 9c09259b8bef8f120cc6f4bb1a44f0eae37d71b3 (from 78a6e054393533a9cb2fe9f5a087d10b0f15bd9c)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Thu Dec 14 10:01:43 2006 +0100

    _mesa_swizzle_ubyte_image: Only use single swizzle_copy call when strides match.
    
    This fixes texture data corruption with glTexSubimage (and probably glTexImage
    under some circumstances) with the texstore swizzle path.

diff --git a/src/mesa/main/texstore.c b/src/mesa/main/texstore.c
index 8956384..87f8fa7 100644
--- a/src/mesa/main/texstore.c
+++ b/src/mesa/main/texstore.c
@@ -808,7 +808,8 @@ _mesa_swizzle_ubyte_image(GLcontext *ctx
 
 /*    _mesa_printf("map %d %d %d %d\n", map[0], map[1], map[2], map[3]);  */
 
-   if (srcRowStride == srcWidth * srcComponents &&
+   if (srcRowStride == dstRowStride &&
+       srcRowStride == srcWidth * srcComponents &&
        dimensions < 3) {
       /* 1 and 2D images only */
       GLubyte *dstImage = (GLubyte *) dstAddr
diff-tree 78a6e054393533a9cb2fe9f5a087d10b0f15bd9c (from 2956a0c8a8395e4d9ae00888aeb88ea5c38b89ad)
Author: Michel Dänzer <michel at tungstengraphics.com>
Date:   Tue Dec 12 09:23:53 2006 +0100

    mipmap_limits: Fix display of current texture filtering mode.

diff --git a/progs/tests/mipmap_limits.c b/progs/tests/mipmap_limits.c
index 3bcb8a8..dc066ca 100644
--- a/progs/tests/mipmap_limits.c
+++ b/progs/tests/mipmap_limits.c
@@ -127,7 +127,7 @@ static void display(void)
    GLfloat tcm = 4.0;
     printf("BASE_LEVEL = %d  MAX_LEVEL = %d  MIN_LOD = %f MAX_LOD = %f Bias = %.2g  filter = %s\n",
            BaseLevel, MaxLevel, MinLod, MaxLod, LodBias,
-           NearestFilter ? "LINEAR" : "NEAREST");
+           NearestFilter ? "NEAREST" : "LINEAR");
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_BASE_LEVEL, BaseLevel);
     glTexParameteri(GL_TEXTURE_2D, GL_TEXTURE_MAX_LEVEL, MaxLevel);
 



More information about the mesa-commit mailing list