Fix looping for multi-color buffer writing.
authorBrian <brian.paul@tungstengraphics.com>
Mon, 10 Dec 2007 04:10:39 +0000 (21:10 -0700)
committerBrian <brian.paul@tungstengraphics.com>
Mon, 10 Dec 2007 04:10:39 +0000 (21:10 -0700)
src/mesa/pipe/softpipe/sp_context.h
src/mesa/pipe/softpipe/sp_quad.c
src/mesa/pipe/softpipe/sp_quad_blend.c
src/mesa/pipe/softpipe/sp_quad_bufloop.c
src/mesa/pipe/softpipe/sp_quad_colormask.c
src/mesa/pipe/softpipe/sp_quad_output.c

index d4763a98c66c4ee80002925b9655eb985685afa6..b97cdc52c61d64ea593dc9f3c8534ff37203f453 100644 (file)
@@ -154,7 +154,7 @@ struct softpipe_context {
    struct draw_stage *setup;
    struct draw_stage *vbuf;
 
-   struct pipe_surface *cbuf;      /**< current color buffer (one of cbufs) */
+   uint current_cbuf;      /**< current color buffer being written to */
 
    struct softpipe_tile_cache *cbuf_cache[PIPE_MAX_COLOR_BUFS];
    struct softpipe_tile_cache *zbuf_cache;
index e0327c4cf9cd1d5c006c3880d2a6dd0f957817ee..6330465a8b960fd472c844997b1a5aef3a72dda9 100644 (file)
@@ -77,7 +77,7 @@ sp_build_quad_pipeline(struct softpipe_context *sp)
 
    if (sp->framebuffer.num_cbufs == 1) {
       /* the usual case: write to exactly one colorbuf */
-      sp->cbuf = sp->framebuffer.cbufs[0];
+      sp->current_cbuf = 0;
    }
    else {
       /* insert bufloop stage */
index 696e252af17309e9d18cc82d2449b09e75b86697..76a0873fc5e88daf174f18ad2989cdf0591ab66a 100644 (file)
@@ -107,7 +107,8 @@ logicop_quad(struct quad_stage *qs, struct quad_header *quad)
    uint *dst4 = (uint *) dst;
    uint *res4 = (uint *) res;
    struct softpipe_cached_tile *
-      tile = sp_get_cached_tile(softpipe, softpipe->cbuf_cache[0],
+      tile = sp_get_cached_tile(softpipe,
+                                softpipe->cbuf_cache[softpipe->current_cbuf],
                                 quad->x0, quad->y0);
    uint i, j;
 
@@ -224,7 +225,8 @@ blend_quad(struct quad_stage *qs, struct quad_header *quad)
    static const float one[4] = { 1, 1, 1, 1 };
    float source[4][QUAD_SIZE], dest[4][QUAD_SIZE];
    struct softpipe_cached_tile *tile
-      = sp_get_cached_tile(softpipe, softpipe->cbuf_cache[0],
+      = sp_get_cached_tile(softpipe,
+                           softpipe->cbuf_cache[softpipe->current_cbuf],
                            quad->x0, quad->y0);
    uint i, j;
 
index aac70e2b04e473c39e21f9d7fc3869d2df6bb037..e704b4043cfb13f2986b9ed2d6d5d7779ffc1af1 100644 (file)
@@ -30,7 +30,7 @@ cbuf_loop_quad(struct quad_stage *qs, struct quad_header *quad)
 
    for (i = 0; i < softpipe->framebuffer.num_cbufs; i++) {
       /* set current cbuffer */
-      softpipe->cbuf = softpipe->framebuffer.cbufs[i];
+      softpipe->current_cbuf = i;
 
       /* pass blended quad to next stage */
       qs->next->run(qs->next, quad);
@@ -38,8 +38,6 @@ cbuf_loop_quad(struct quad_stage *qs, struct quad_header *quad)
       /* restore quad's colors for next buffer */
       memcpy(quad->outputs.color, tmp, sizeof(tmp));
    }
-
-   softpipe->cbuf = NULL; /* prevent accidental use */
 }
 
 
index c585aa3eddd35dc33a399136c017fccfcf056689..f5e0a32d1b72bbde9f1b9af454330b7493caf87c 100644 (file)
@@ -50,7 +50,8 @@ colormask_quad(struct quad_stage *qs, struct quad_header *quad)
    float dest[4][QUAD_SIZE];
    struct softpipe_cached_tile *tile
       = sp_get_cached_tile(softpipe,
-                           softpipe->cbuf_cache[0], quad->x0, quad->y0);
+                           softpipe->cbuf_cache[softpipe->current_cbuf],
+                           quad->x0, quad->y0);
    uint i, j;
 
    /* get/swizzle dest colors */
index cebfec18f74f5594672c72ebbf428e46a750d883..f04a550e3df319b285603f49628b31ed72756b0e 100644 (file)
@@ -43,7 +43,8 @@ output_quad(struct quad_stage *qs, struct quad_header *quad)
 {
    struct softpipe_context *softpipe = qs->softpipe;
    struct softpipe_cached_tile *tile
-      = sp_get_cached_tile(softpipe, softpipe->cbuf_cache[0],
+      = sp_get_cached_tile(softpipe,
+                           softpipe->cbuf_cache[softpipe->current_cbuf],
                            quad->x0, quad->y0);
    /* in-tile pos: */
    const int itx = quad->x0 % TILE_SIZE;