llvmpipe: use new u_ringbuffer for scene queue
[mesa.git] / src / gallium / drivers / llvmpipe / lp_state_surface.c
index bb1396c3ab88487404b404ce624d75c2e5019628..0e9f03b90b85b12b6b120eb30bf5fcf23863e8c4 100644 (file)
 /* Authors:  Keith Whitwell <keith@tungstengraphics.com>
  */
 
+#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;
    }
 }