st/mesa: return success/fail from guess_and_alloc_texture()
authorBrian Paul <brianp@vmware.com>
Tue, 4 May 2010 16:30:52 +0000 (10:30 -0600)
committerBrian Paul <brianp@vmware.com>
Tue, 4 May 2010 16:32:02 +0000 (10:32 -0600)
Before we looked at stObj->pt to see if we may have run out of memory,
but that's not a good indicator.  This fixes the spurious GL_OUT_OF_MEMORY
errors that could arise before.

src/mesa/state_tracker/st_cb_texture.c

index ed8eb2929a6ddc57f61e2efdf774fc345d4613c2..b66630f9a6ae910f0ecb197a6b3406d4e3dbf233 100644 (file)
@@ -255,8 +255,10 @@ get_texture_dims(GLenum target)
  *
  * We use the given st_texture_image as a clue to determine the size of the
  * mipmap image at level=0.
+ *
+ * \return GL_TRUE for success, GL_FALSE if out of memory.
  */
-static void
+static GLboolean
 guess_and_alloc_texture(struct st_context *st,
                        struct st_texture_object *stObj,
                        const struct st_texture_image *stImage)
@@ -287,7 +289,8 @@ guess_and_alloc_texture(struct st_context *st,
            (dims >= 3 && depth == 1) ) {
          /* we can't determine the image size at level=0 */
          stObj->width0 = stObj->height0 = stObj->depth0 = 0;
-         return;
+         /* this is not an out of memory error */
+         return GL_TRUE;
       }
    }
 
@@ -349,7 +352,9 @@ guess_and_alloc_texture(struct st_context *st,
                                  depth,
                                  bindings);
 
-   DBG("%s - success\n", __FUNCTION__);
+   DBG("%s returning %d\n", __FUNCTION__, (stObj->pt != NULL));
+
+   return stObj->pt != NULL;
 }
 
 
@@ -597,14 +602,12 @@ st_TexImage(GLcontext * ctx,
    }
 
    if (!stObj->pt) {
-      guess_and_alloc_texture(st, stObj, stImage);
-      if (!stObj->pt) {
+      if (!guess_and_alloc_texture(st, stObj, stImage)) {
          /* Probably out of memory.
           * Try flushing any pending rendering, then retry.
           */
          st_finish(st);
-         guess_and_alloc_texture(st, stObj, stImage);
-         if (!stObj->pt) {
+         if (!guess_and_alloc_texture(st, stObj, stImage)) {
             _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage");
             return;
          }