X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fllvmpipe%2Flp_state_surface.c;h=0e9f03b90b85b12b6b120eb30bf5fcf23863e8c4;hb=591401ff05f878ff1607a1a34db1319103025d8f;hp=bb1396c3ab88487404b404ce624d75c2e5019628;hpb=35a90e67ebc37dc0a8432db76c91b8855a94598a;p=mesa.git diff --git a/src/gallium/drivers/llvmpipe/lp_state_surface.c b/src/gallium/drivers/llvmpipe/lp_state_surface.c index bb1396c3ab8..0e9f03b90b8 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_surface.c +++ b/src/gallium/drivers/llvmpipe/lp_state_surface.c @@ -28,12 +28,17 @@ /* Authors: Keith Whitwell */ +#include "pipe/p_state.h" +#include "util/u_surface.h" #include "lp_context.h" #include "lp_state.h" #include "lp_surface.h" +#include "lp_setup.h" #include "draw/draw_context.h" +#include "util/u_format.h" + /** * Set the framebuffer surface info: color buffers, zbuffer, stencil buffer. @@ -43,34 +48,20 @@ llvmpipe_set_framebuffer_state(struct pipe_context *pipe, const struct pipe_framebuffer_state *fb) { struct llvmpipe_context *lp = llvmpipe_context(pipe); - uint i; - boolean dirty = FALSE; - for (i = 0; i < PIPE_MAX_COLOR_BUFS; i++) { - if (lp->framebuffer.cbufs[i] != fb->cbufs[i]) { - pipe_surface_reference(&lp->framebuffer.cbufs[i], fb->cbufs[i]); - dirty = TRUE; - } - } + boolean changed = !util_framebuffer_state_equal(&lp->framebuffer, fb); - if (lp->framebuffer.nr_cbufs != fb->nr_cbufs) { - dirty = TRUE; - lp->framebuffer.nr_cbufs = fb->nr_cbufs; - } + if (changed) { - /* zbuf changing? */ - if (lp->framebuffer.zsbuf != fb->zsbuf) { - dirty = TRUE; - - /* assign new */ - pipe_surface_reference(&lp->framebuffer.zsbuf, fb->zsbuf); + util_copy_framebuffer_state(&lp->framebuffer, fb); /* Tell draw module how deep the Z/depth buffer is */ if (lp->framebuffer.zsbuf) { int depth_bits; double mrd; - depth_bits = pf_get_component_bits(lp->framebuffer.zsbuf->format, - PIPE_FORMAT_COMP_Z); + depth_bits = util_format_get_component_bits(lp->framebuffer.zsbuf->format, + UTIL_FORMAT_COLORSPACE_ZS, + 0); if (depth_bits > 16) { mrd = 0.0000001; } @@ -79,10 +70,9 @@ llvmpipe_set_framebuffer_state(struct pipe_context *pipe, } draw_set_mrd(lp->draw, mrd); } - } - if (dirty) { - lp_setup_set_framebuffer( lp->setup, fb ); + lp_setup_bind_framebuffer( lp->setup, &lp->framebuffer ); + lp->dirty |= LP_NEW_FRAMEBUFFER; } }