X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Fgallium%2Fdrivers%2Fllvmpipe%2Flp_state_surface.c;h=4b135aaf8ba575126c3eb8c607b9f57efcdf01c2;hb=0b50fcbd556ead8d35c2b543f13de433996a5822;hp=909ca9f11703306662c3b63587846efca6319dd5;hpb=c1013f5d404880046f304de706d4216b08bd3011;p=mesa.git diff --git a/src/gallium/drivers/llvmpipe/lp_state_surface.c b/src/gallium/drivers/llvmpipe/lp_state_surface.c index 909ca9f1170..4b135aaf8ba 100644 --- a/src/gallium/drivers/llvmpipe/lp_state_surface.c +++ b/src/gallium/drivers/llvmpipe/lp_state_surface.c @@ -28,13 +28,19 @@ /* Authors: Keith Whitwell */ +#include "pipe/p_state.h" +#include "util/u_inlines.h" +#include "util/u_framebuffer.h" +#include "util/u_surface.h" #include "lp_context.h" +#include "lp_scene.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. @@ -44,34 +50,23 @@ 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; - } + assert(fb->width <= LP_MAX_WIDTH); + assert(fb->height <= LP_MAX_HEIGHT); - /* zbuf changing? */ - if (lp->framebuffer.zsbuf != fb->zsbuf) { - dirty = TRUE; + if (changed) { - /* 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; } @@ -80,12 +75,8 @@ llvmpipe_set_framebuffer_state(struct pipe_context *pipe, } draw_set_mrd(lp->draw, mrd); } - } - if (dirty) { - lp_setup_bind_framebuffer( lp->setup, - fb->cbufs[0], - fb->zsbuf ); + lp_setup_bind_framebuffer( lp->setup, &lp->framebuffer ); lp->dirty |= LP_NEW_FRAMEBUFFER; }