[Mesa-dev] [PATCH 8/8] softpipe: When doing write_all_cbufs, don't stomp over the color.

Brian Paul brianp at vmware.com
Tue Jul 26 07:09:53 PDT 2011


On 07/25/2011 04:39 PM, Eric Anholt wrote:
> We have to make it through this loop processing the color multiple
> times, so we can't go overwriting it on our first color buffer.
> ---
>   src/gallium/drivers/softpipe/sp_quad_blend.c |   16 ++++++++++++----
>   1 files changed, 12 insertions(+), 4 deletions(-)
>
> diff --git a/src/gallium/drivers/softpipe/sp_quad_blend.c b/src/gallium/drivers/softpipe/sp_quad_blend.c
> index 82f9785..c881194 100644
> --- a/src/gallium/drivers/softpipe/sp_quad_blend.c
> +++ b/src/gallium/drivers/softpipe/sp_quad_blend.c
> @@ -817,17 +817,25 @@ blend_fallback(struct quad_stage *qs,
>                                 quads[0]->input.y0);
>         boolean has_dst_alpha
>            = util_format_has_alpha(softpipe->framebuffer.cbufs[cbuf]->format);
> -      uint q, i, j, qbuf;
> -
> -      qbuf = write_all ? 0 : cbuf;
> +      uint q, i, j;
>
>         for (q = 0; q<  nr; q++) {
>            struct quad_header *quad = quads[q];
>            float (*quadColor)[4];
> +         float temp_quad_color[QUAD_SIZE][4];
>            const int itx = (quad->input.x0&  (TILE_SIZE-1));
>            const int ity = (quad->input.y0&  (TILE_SIZE-1));
>
> -         quadColor = quad->output.color[qbuf];
> +         if (write_all) {
> +            for (j = 0; j<  QUAD_SIZE; j++) {
> +               for (i = 0; i<  4; i++) {
> +                  temp_quad_color[i][j] = quad->output.color[0][i][j];
> +               }
> +            }

I wonder if memcpy(temp_quad_color, quad->output.color[0]) would be 
faster.  No biggie.


> +            quadColor = temp_quad_color;
> +         } else {
> +            quadColor = quad->output.color[cbuf];
> +         }
>
>            /* get/swizzle dest colors
>             */

Reviewed-by: Brian Paul <brianp at vmware.com>



More information about the mesa-dev mailing list