diff options
Diffstat (limited to 'src/gallium/drivers/llvmpipe/lp_state_surface.c')
-rw-r--r-- | src/gallium/drivers/llvmpipe/lp_state_surface.c | 41 |
1 files changed, 11 insertions, 30 deletions
diff --git a/src/gallium/drivers/llvmpipe/lp_state_surface.c b/src/gallium/drivers/llvmpipe/lp_state_surface.c index c06ce8b75c..06560335d7 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_surface.c +++ b/src/gallium/drivers/llvmpipe/lp_state_surface.c @@ -31,16 +31,12 @@ #include "lp_context.h" #include "lp_state.h" #include "lp_surface.h" -#include "lp_tile_cache.h" #include "draw/draw_context.h" /** - * XXX this might get moved someday * Set the framebuffer surface info: color buffers, zbuffer, stencil buffer. - * Here, we flush the old surfaces and update the tile cache to point to the new - * surfaces. */ void llvmpipe_set_framebuffer_state(struct pipe_context *pipe, @@ -48,38 +44,23 @@ llvmpipe_set_framebuffer_state(struct pipe_context *pipe, { struct llvmpipe_context *lp = llvmpipe_context(pipe); uint i; + boolean dirty = FALSE; for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++) { - /* check if changing cbuf */ if (lp->framebuffer.cbufs[i] != fb->cbufs[i]) { - /* flush old */ - lp_tile_cache_map_transfers(lp->cbuf_cache[i]); - lp_flush_tile_cache(lp->cbuf_cache[i]); - - /* assign new */ pipe_surface_reference(&lp->framebuffer.cbufs[i], fb->cbufs[i]); - - /* update cache */ - lp_tile_cache_set_surface(lp->cbuf_cache[i], fb->cbufs[i]); + dirty = TRUE; } } - lp->framebuffer.nr_cbufs = fb->nr_cbufs; + if (lp->framebuffer.nr_cbufs != fb->nr_cbufs) { + dirty = TRUE; + lp->framebuffer.nr_cbufs = fb->nr_cbufs; + } /* zbuf changing? */ if (lp->framebuffer.zsbuf != fb->zsbuf) { - - if(lp->zsbuf_transfer) { - struct pipe_screen *screen = pipe->screen; - - if(lp->zsbuf_map) { - screen->transfer_unmap(screen, lp->zsbuf_transfer); - lp->zsbuf_map = NULL; - } - - screen->tex_transfer_destroy(lp->zsbuf_transfer); - lp->zsbuf_transfer = NULL; - } + dirty = TRUE; /* assign new */ pipe_surface_reference(&lp->framebuffer.zsbuf, fb->zsbuf); @@ -100,8 +81,8 @@ llvmpipe_set_framebuffer_state(struct pipe_context *pipe, } } - lp->framebuffer.width = fb->width; - lp->framebuffer.height = fb->height; - - lp->dirty |= LP_NEW_FRAMEBUFFER; + if (dirty) { + lp_setup_set_framebuffer( llvmpipe->setup, fb ); + lp->dirty |= LP_NEW_FRAMEBUFFER; + } } |