Mesa (mesa_7_5_branch): st/mesa: fix texture memory allocation bug

Brian Paul brianp at kemper.freedesktop.org
Wed Sep 16 19:08:46 UTC 2009


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

Author: Brian Paul <brianp at vmware.com>
Date:   Wed Sep 16 12:57:26 2009 -0600

st/mesa: fix texture memory allocation bug

The following example caused an incorrect GL_OUT_OF_MEMORY error to be
raised in glTexSubImage2D:

   glTexImage2D(level=0, width=32, height=32, pixels=NULL);
   glTexImage2D(level=0, width=64, height=64, pixels=NULL);
   glTexSubImage2D(level=0, pixels!=NULL);

The second glTexImage2D() call needs to cause the first image to be
deallocated then reallocated at the new size.  This was not happening
because we were testing for pixels==NULL too early.

---

 src/mesa/state_tracker/st_cb_texture.c |   12 ++++++++++--
 1 files changed, 10 insertions(+), 2 deletions(-)

diff --git a/src/mesa/state_tracker/st_cb_texture.c b/src/mesa/state_tracker/st_cb_texture.c
index 2db28ef..31196fe 100644
--- a/src/mesa/state_tracker/st_cb_texture.c
+++ b/src/mesa/state_tracker/st_cb_texture.c
@@ -661,8 +661,10 @@ st_TexImage(GLcontext * ctx,
 					   format, type,
 					   pixels, unpack, "glTexImage");
    }
-   if (!pixels)
-      return;
+
+   /* Note: we can't check for pixels==NULL until after we've allocated
+    * memory for the texture.
+    */
 
    /* See if we can do texture compression with a blit/render.
     */
@@ -673,6 +675,9 @@ st_TexImage(GLcontext * ctx,
                                    stImage->pt->format,
                                    stImage->pt->target,
                                    PIPE_TEXTURE_USAGE_RENDER_TARGET, 0)) {
+      if (!pixels)
+         goto done;
+
       if (compress_with_blit(ctx, target, level, 0, 0, 0, width, height, depth,
                              format, type, pixels, unpack, texImage)) {
          goto done;
@@ -714,6 +719,9 @@ st_TexImage(GLcontext * ctx,
       return;
    }
 
+   if (!pixels)
+      goto done;
+
    DBG("Upload image %dx%dx%d row_len %x pitch %x\n",
        width, height, depth, width * texelBytes, dstRowStride);
 




More information about the mesa-commit mailing list