OSDN Git Service

softpipe: index the correct blend/mask state index
authorBrian Paul <brianp@vmware.com>
Mon, 5 Apr 2010 17:00:52 +0000 (11:00 -0600)
committerBrian Paul <brianp@vmware.com>
Mon, 5 Apr 2010 17:00:54 +0000 (11:00 -0600)
Need to check pipe_blend_state::independent_blend_enable to determine
which render target/index to use when checking blend enable and colormask
state.

This is part of the fix for piglit/fbo-drawbuffers

src/gallium/drivers/softpipe/sp_quad_blend.c

index d65307b..ead4893 100644 (file)
@@ -744,6 +744,8 @@ blend_fallback(struct quad_stage *qs,
 
    for (cbuf = 0; cbuf < softpipe->framebuffer.nr_cbufs; cbuf++) 
    {
+      /* which blend/mask state index to use: */
+      const uint blend_buf = blend->independent_blend_enable ? cbuf : 0;
       float dest[4][QUAD_SIZE];
       struct softpipe_cached_tile *tile
          = sp_get_cached_tile(softpipe->cbuf_cache[cbuf],
@@ -771,11 +773,11 @@ blend_fallback(struct quad_stage *qs,
          if (blend->logicop_enable) {
             logicop_quad( qs, quadColor, dest );
          }
-         else if (blend->rt[cbuf].blend_enable) {
+         else if (blend->rt[blend_buf].blend_enable) {
             blend_quad( qs, quadColor, dest, cbuf );
          }
 
-         if (blend->rt[cbuf].colormask != 0xf)
+         if (blend->rt[blend_buf].colormask != 0xf)
             colormask_quad( blend->rt[cbuf].colormask, quadColor, dest);
    
          /* Output color values