diff options
author | Brian <[email protected]> | 2007-12-15 09:49:20 -0700 |
---|---|---|
committer | Brian <[email protected]> | 2007-12-15 09:49:20 -0700 |
commit | de1201a0ba05068ccdc731f0a79395ce58b9121a (patch) | |
tree | 71b67eb85f6eb71e40477ec8f64e2fa6cc263e91 | |
parent | 017f862de1f857bca29f09794539aaf411014f13 (diff) |
don't allocate scratch tile in sp_tile_cache_flush_clear() to avoid stack overflow
-rw-r--r-- | src/mesa/pipe/softpipe/sp_tile_cache.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/src/mesa/pipe/softpipe/sp_tile_cache.c b/src/mesa/pipe/softpipe/sp_tile_cache.c index d637c7291f6..a7be3812fea 100644 --- a/src/mesa/pipe/softpipe/sp_tile_cache.c +++ b/src/mesa/pipe/softpipe/sp_tile_cache.c @@ -58,6 +58,8 @@ struct softpipe_tile_cache struct pipe_surface *tex_surf; int tex_face, tex_level, tex_z; + + struct softpipe_cached_tile tile; /**< scratch tile for clears */ }; @@ -279,11 +281,10 @@ sp_tile_cache_flush_clear(struct pipe_context *pipe, const uint w = tc->surface->width; const uint h = tc->surface->height; uint x, y; - struct softpipe_cached_tile tile; uint numCleared = 0; - /* clear one tile to the clear value */ - clear_tile(&tile, ps->format, tc->clear_val); + /* clear the scratch tile to the clear value */ + clear_tile(&tc->tile, ps->format, tc->clear_val); /* push the tile to all positions marked as clear */ for (y = 0; y < h; y += TILE_SIZE) { @@ -291,7 +292,7 @@ sp_tile_cache_flush_clear(struct pipe_context *pipe, if (is_clear_flag_set(tc->clear_flags, x, y)) { pipe->put_tile(pipe, ps, x, y, TILE_SIZE, TILE_SIZE, - tile.data.color32, 0/*STRIDE*/); + tc->tile.data.color32, 0/*STRIDE*/); /* do this? */ clear_clear_flag(tc->clear_flags, x, y); |