nouveau: only try to get new storage if there are any levels
authorIlia Mirkin <imirkin@alum.mit.edu>
Sun, 10 Aug 2014 15:52:55 +0000 (11:52 -0400)
committerIlia Mirkin <imirkin@alum.mit.edu>
Wed, 13 Aug 2014 14:09:01 +0000 (10:09 -0400)
This would try to allocate 0-sized bo's when the max level was below the
base level.

Signed-off-by: Ilia Mirkin <imirkin@alum.mit.edu>
Reviewed-by: Francisco Jerez <currojerez@riseup.net>
src/mesa/drivers/dri/nouveau/nouveau_texture.c

index e7d5c0238b6e4debf6453d5f10cc99cd242d992b..4626cc3022997cd19a4f5368b980717783f75f61 100644 (file)
@@ -345,16 +345,19 @@ relayout_texture(struct gl_context *ctx, struct gl_texture_object *t)
                        height = minify(height, 1);
                }
 
-               /* Get new storage. */
-               size = align(offset, 64);
-
-               ret = nouveau_bo_new(context_dev(ctx), NOUVEAU_BO_MAP |
-                                    NOUVEAU_BO_GART | NOUVEAU_BO_VRAM,
-                                    0, size, NULL, &ss[last].bo);
-               assert(!ret);
-
-               for (i = t->BaseLevel; i < last; i++)
-                       nouveau_bo_ref(ss[last].bo, &ss[i].bo);
+               if (t->BaseLevel <= last) {
+                       /* Get new storage. */
+                       size = align(offset, 64);
+                       assert(size);
+
+                       ret = nouveau_bo_new(context_dev(ctx), NOUVEAU_BO_MAP |
+                                            NOUVEAU_BO_GART | NOUVEAU_BO_VRAM,
+                                            0, size, NULL, &ss[last].bo);
+                       assert(!ret);
+
+                       for (i = t->BaseLevel; i < last; i++)
+                               nouveau_bo_ref(ss[last].bo, &ss[i].bo);
+               }
        }
 }