gallium: if we run out of memory in st_TexImage, flush and try again.
authorBrian Paul <brian.paul@tungstengraphics.com>
Thu, 18 Sep 2008 21:35:56 +0000 (15:35 -0600)
committerBrian Paul <brian.paul@tungstengraphics.com>
Thu, 18 Sep 2008 21:37:13 +0000 (15:37 -0600)
If the driver buffers a scene flushing should release old textures and
make space for new ones.  Fixes problem with texdown.c test.

src/mesa/state_tracker/st_cb_texture.c

index 2e1ad93942be711ee91ff5ccc4e94bf3beb36556..958f88bf2c474e56c39c5c34c8e264535625218e 100644 (file)
@@ -481,8 +481,15 @@ st_TexImage(GLcontext * ctx,
    if (!stObj->pt) {
       guess_and_alloc_texture(ctx->st, stObj, stImage);
       if (!stObj->pt) {
-         _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage");
-         return;
+         /* Probably out of memory.
+          * Try flushing any pending rendering, then retry.
+          */
+         st_finish(ctx->st);
+         guess_and_alloc_texture(ctx->st, stObj, stImage);
+         if (!stObj->pt) {
+            _mesa_error(ctx, GL_OUT_OF_MEMORY, "glTexImage");
+            return;
+         }
       }
    }