[Mesa-stable] Request for backport of "i965/vs: Gen4/5: enable front colors if back colors are written"

Carl Worth cworth at cworth.org
Tue Jul 30 12:24:50 PDT 2013


Hi Chris,

The commit below looks like a good candidate for a stable release,
(small change, fixes 11 piglit cases).

But the commit does not apply trivially to the 9.1 branch due to obvious
changes, (c.prog_data.outputs_written vs. outputs_written, etc.).

Could you please prepare a backported version of this patch for the 9.1
branch?

Thanks,

-Carl

commit 1ec66f2fb2fea0497efebc1db83c75ec95a816a4
Author: Chris Forbes <chrisf at ijw.co.nz>
Date:   Sun Jul 7 23:13:07 2013 +1200

    i965/vs: Gen4/5: enable front colors if back colors are written
    
    Fixes undefined results if a back color is written, but the
    corresponding front color is not, and only backfacing primitives are
    drawn. Results are still undefined if a frontfacing primitive is drawn,
    but that's OK.
    
    The other reasonable way to fix this would have been to just pick
    the one color slot that was populated, but that dilutes the value of
    the tests.
    
    On Gen6+, the fixed function clipper and triangle setup already take
    care of this.
    
    Fixes 11 piglits:
    spec/glsl-1.10/execution/interpolation/interpolation-none-gl_Back*Color-*
    
    NOTE: This is a candidate for stable branches.
    
    Signed-off-by: Chris Forbes <chrisf at ijw.co.nz>
    Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>

diff --git a/src/mesa/drivers/dri/i965/brw_vs.c b/src/mesa/drivers/dri/i965/brw_vs.c
index 60b40c5..5b8173d 100644
--- a/src/mesa/drivers/dri/i965/brw_vs.c
+++ b/src/mesa/drivers/dri/i965/brw_vs.c
@@ -277,6 +277,12 @@ do_vs_prog(struct brw_context *brw,
          if (c.key.point_coord_replace & (1 << i))
             outputs_written |= BITFIELD64_BIT(VARYING_SLOT_TEX0 + i);
       }
+
+      /* if back colors are written, allocate slots for front colors too */
+      if (outputs_written & BITFIELD64_BIT(VARYING_SLOT_BFC0))
+         outputs_written |= BITFIELD64_BIT(VARYING_SLOT_COL0);
+      if (outputs_written & BITFIELD64_BIT(VARYING_SLOT_BFC1))
+         outputs_written |= BITFIELD64_BIT(VARYING_SLOT_COL1);
    }
 
    brw_compute_vue_map(brw, &prog_data.base.vue_map, outputs_written,


More information about the mesa-stable mailing list