From: Brian Paul Date: Mon, 7 Apr 2008 22:45:17 +0000 (-0600) Subject: gallium: check ctx->DrawBuffer before flushing bitmap cache. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=985134211d9fbfe9b7885beeeb85fdcf2ab78f87;p=mesa.git gallium: check ctx->DrawBuffer before flushing bitmap cache. During context unbind, we may not have a draw buffer. This fixes demos/tunnel2.c --- diff --git a/src/mesa/state_tracker/st_cb_bitmap.c b/src/mesa/state_tracker/st_cb_bitmap.c index 59f3c385df3..505a13cc2b3 100644 --- a/src/mesa/state_tracker/st_cb_bitmap.c +++ b/src/mesa/state_tracker/st_cb_bitmap.c @@ -547,36 +547,38 @@ void st_flush_bitmap_cache(struct st_context *st) { if (!st->bitmap.cache->empty) { - struct bitmap_cache *cache = st->bitmap.cache; - struct pipe_context *pipe = st->pipe; - struct pipe_screen *screen = pipe->screen; - struct pipe_surface *surf; - void *dest; - - assert(cache->xmin <= cache->xmax); - /* - printf("flush size %d x %d at %d, %d\n", - cache->xmax - cache->xmin, - cache->ymax - cache->ymin, - cache->xpos, cache->ypos); - */ - - /* update the texture map image */ - surf = screen->get_tex_surface(screen, cache->texture, 0, 0, 0); - dest = pipe_surface_map(surf); - memcpy(dest, cache->buffer, sizeof(cache->buffer)); - pipe_surface_unmap(surf); - pipe_surface_reference(&surf, NULL); - - pipe->texture_update(pipe, cache->texture, 0, 0x1); - - draw_bitmap_quad(st->ctx, - cache->xpos, - cache->ypos, - st->ctx->Current.RasterPos[2], - BITMAP_CACHE_WIDTH, BITMAP_CACHE_HEIGHT, - cache->texture); + if (st->ctx->DrawBuffer) { + struct bitmap_cache *cache = st->bitmap.cache; + struct pipe_context *pipe = st->pipe; + struct pipe_screen *screen = pipe->screen; + struct pipe_surface *surf; + void *dest; + + assert(cache->xmin <= cache->xmax); + /* + printf("flush size %d x %d at %d, %d\n", + cache->xmax - cache->xmin, + cache->ymax - cache->ymin, + cache->xpos, cache->ypos); + */ + + /* update the texture map image */ + surf = screen->get_tex_surface(screen, cache->texture, 0, 0, 0); + dest = pipe_surface_map(surf); + memcpy(dest, cache->buffer, sizeof(cache->buffer)); + pipe_surface_unmap(surf); + pipe_surface_reference(&surf, NULL); + + pipe->texture_update(pipe, cache->texture, 0, 0x1); + + draw_bitmap_quad(st->ctx, + cache->xpos, + cache->ypos, + st->ctx->Current.RasterPos[2], + BITMAP_CACHE_WIDTH, BITMAP_CACHE_HEIGHT, + cache->texture); + } reset_cache(st); } }