Mesa (master): st/mesa: fix mipmap generation bug

Brian Paul brianp at kemper.freedesktop.org
Mon Dec 6 18:35:35 UTC 2010


Module: Mesa
Branch: master
Commit: cae2bb76c1147d48f75ddd7a058a48d11e72ba03
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=cae2bb76c1147d48f75ddd7a058a48d11e72ba03

Author: Brian Paul <brianp at vmware.com>
Date:   Mon Dec  6 11:01:19 2010 -0700

st/mesa: fix mipmap generation bug

In st_finalize_texture() we were looking at the st_texture_object::
lastLevel field instead of the pipe_resource::last_level field to
determine which resource to store the mipmap in.

Then, in st_generate_mipmap() we need to call st_finalize_texture() to
make sure the destination resource is properly allocated.

These changes fix the broken piglit fbo-generatemipmap-formats test.

---

 src/mesa/state_tracker/st_cb_texture.c |    3 ++-
 src/mesa/state_tracker/st_gen_mipmap.c |    6 ++++++
 2 files changed, 8 insertions(+), 1 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
index d0fb630..866426a 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -1855,8 +1855,9 @@ st_finalize_texture(struct gl_context *ctx,
     * will match.
     */
    if (firstImage->pt &&
+       stObj->pt &&
        firstImage->pt != stObj->pt &&
-       firstImage->pt->last_level >= stObj->lastLevel) {
+       firstImage->pt->last_level >= stObj->pt->last_level) {
       pipe_resource_reference(&stObj->pt, firstImage->pt);
       pipe_sampler_view_reference(&stObj->sampler_view, NULL);
    }
diff --git a/src/mesa/state_tracker/st_gen_mipmap.c b/src/mesa/state_tracker/st_gen_mipmap.c
index 2472c0b..c5f6008 100644
--- a/src/mesa/state_tracker/st_gen_mipmap.c
+++ b/src/mesa/state_tracker/st_gen_mipmap.c
@@ -370,6 +370,12 @@ st_generate_mipmap(struct gl_context *ctx, GLenum target,
 
       pt = stObj->pt;
    }
+   else {
+      /* Make sure that the base texture image data is present in the
+       * texture buffer.
+       */
+      st_finalize_texture(ctx, st->pipe, texObj);
+   }
 
    assert(pt->last_level >= lastLevel);
 




More information about the mesa-commit mailing list