llvmpipe: limit max texture size to 2Kx2K for now
authorBrian Paul <brianp@vmware.com>
Fri, 2 Apr 2010 15:17:47 +0000 (09:17 -0600)
committerBrian Paul <brianp@vmware.com>
Fri, 2 Apr 2010 15:20:05 +0000 (09:20 -0600)
MAXWIDTH/HEIGHT were 2048 but the max texture size was 4096.
This caused a crash if a 4Kx4K texture was created and rendered to.
See comment about max framebuffer size in lp_scene.h.

Also added assertions to catch this inconsistancy in the future.

src/gallium/drivers/llvmpipe/lp_scene.c
src/gallium/drivers/llvmpipe/lp_state_surface.c
src/gallium/drivers/llvmpipe/lp_texture.h

index 681ce674d49e1d8ff16d639a9918e9e3e8038b35..0c51b52d1700fa39ed7e47786286e32d7dc77e7e 100644 (file)
@@ -483,6 +483,9 @@ void lp_scene_begin_binning( struct lp_scene *scene,
 
    scene->tiles_x = align(fb->width, TILE_SIZE) / TILE_SIZE;
    scene->tiles_y = align(fb->height, TILE_SIZE) / TILE_SIZE;
+
+   assert(scene->tiles_x <= TILES_X);
+   assert(scene->tiles_y <= TILES_Y);
 }
 
 
index 048ac5b968b315e4d7692602b40beab37aa59150..7d86c5750c5e7e22d4e0b303235a8947bcd17631 100644 (file)
@@ -32,6 +32,7 @@
 #include "util/u_inlines.h"
 #include "util/u_surface.h"
 #include "lp_context.h"
+#include "lp_scene.h"
 #include "lp_state.h"
 #include "lp_setup.h"
 
@@ -51,6 +52,9 @@ llvmpipe_set_framebuffer_state(struct pipe_context *pipe,
 
    boolean changed = !util_framebuffer_state_equal(&lp->framebuffer, fb);
 
+   assert(fb->width <= MAXWIDTH);
+   assert(fb->height <= MAXHEIGHT);
+
    if (changed) {
 
       util_copy_framebuffer_state(&lp->framebuffer, fb);
index 2350c26e4fccd06bfd442cbffe32eb4dda641a0b..49623949bf5ac7d5c46254199d3ab88e379011db 100644 (file)
@@ -32,7 +32,7 @@
 #include "pipe/p_state.h"
 
 
-#define LP_MAX_TEXTURE_2D_LEVELS 13  /* 4K x 4K for now */
+#define LP_MAX_TEXTURE_2D_LEVELS 12  /* 2K x 2K for now */
 #define LP_MAX_TEXTURE_3D_LEVELS 10  /* 512 x 512 x 512 for now */