On 8 September 2011 23:32, Eric Anholt <span dir="ltr">&lt;<a href="mailto:eric@anholt.net">eric@anholt.net</a>&gt;</span> wrote:<br><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex;">
Fixes piglit:<br>
vertex-program-two-side<br>
vertex-program-two-side primary<br>
vertex-program-two-side secondary<br>
---<br>
 src/mesa/drivers/dri/i965/brw_vs_constval.c |    6 +++---<br>
 src/mesa/drivers/dri/i965/gen6_sf_state.c   |    5 +++--<br>
 src/mesa/drivers/dri/i965/gen7_sf_state.c   |    6 ++----<br>
 3 files changed, 8 insertions(+), 9 deletions(-)<br>
<br>
diff --git a/src/mesa/drivers/dri/i965/brw_vs_constval.c b/src/mesa/drivers/dri/i965/brw_vs_constval.c<br>
index 67af23e..4d1c4e0 100644<br>
--- a/src/mesa/drivers/dri/i965/brw_vs_constval.c<br>
+++ b/src/mesa/drivers/dri/i965/brw_vs_constval.c<br>
@@ -197,8 +197,8 @@ static void calc_wm_input_sizes( struct brw_context *brw )<br>
<br>
    memset(&amp;t, 0, sizeof(t));<br>
<br>
-   /* _NEW_LIGHT */<br>
-   if (ctx-&gt;Light.Model.TwoSide)<br>
+   /* _NEW_LIGHT | _NEW_PROGRAM */<br>
+   if (ctx-&gt;VertexProgram._TwoSideEnabled)<br>
       t.twoside = 1;<br>
<br>
    for (i = 0; i &lt; VERT_ATTRIB_MAX; i++)<br>
@@ -233,7 +233,7 @@ static void calc_wm_input_sizes( struct brw_context *brw )<br>
<br>
 const struct brw_tracked_state brw_wm_input_sizes = {<br>
    .dirty = {<br>
-      .mesa  = _NEW_LIGHT,<br>
+      .mesa  = _NEW_LIGHT | _NEW_PROGRAM,<br>
       .brw   = BRW_NEW_VERTEX_PROGRAM | BRW_NEW_INPUT_DIMENSIONS,<br>
       .cache = 0<br>
    },<br>
diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c b/src/mesa/drivers/dri/i965/gen6_sf_state.c<br>
index 4a9c094..bb8bc83 100644<br>
--- a/src/mesa/drivers/dri/i965/gen6_sf_state.c<br>
+++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c<br>
@@ -115,7 +115,6 @@ upload_sf_state(struct brw_context *brw)<br>
    GLboolean render_to_fbo = brw-&gt;intel.ctx.DrawBuffer-&gt;Name != 0;<br>
    int attr = 0, input_index = 0;<br>
    int urb_entry_read_offset;<br>
-   int two_side_color = (ctx-&gt;Light.Enabled &amp;&amp; ctx-&gt;Light.Model.TwoSide);<br>
    float point_size;<br>
    uint16_t attr_overrides[FRAG_ATTRIB_MAX];<br>
    int nr_userclip;<br>
@@ -285,9 +284,10 @@ upload_sf_state(struct brw_context *brw)<br>
        */<br>
       assert(input_index &lt; 16 || attr == input_index);<br>
<br>
+      /* _NEW_LIGHT | _NEW_PROGRAM */<br>
       attr_overrides[input_index++] =<br>
          get_attr_override(&amp;vue_map, urb_entry_read_offset, attr,<br>
-                           two_side_color);<br>
+                           ctx-&gt;VertexProgram._TwoSideEnabled);<br>
    }<br>
<br>
    for (; input_index &lt; FRAG_ATTRIB_MAX; input_index++)<br>
@@ -315,6 +315,7 @@ upload_sf_state(struct brw_context *brw)<br>
 const struct brw_tracked_state gen6_sf_state = {<br>
    .dirty = {<br>
       .mesa  = (_NEW_LIGHT |<br>
+               _NEW_PROGRAM |<br>
                _NEW_POLYGON |<br>
                _NEW_LINE |<br>
                _NEW_SCISSOR |<br>
diff --git a/src/mesa/drivers/dri/i965/gen7_sf_state.c b/src/mesa/drivers/dri/i965/gen7_sf_state.c<br>
index af98041..85d2d87 100644<br>
--- a/src/mesa/drivers/dri/i965/gen7_sf_state.c<br>
+++ b/src/mesa/drivers/dri/i965/gen7_sf_state.c<br>
@@ -45,9 +45,6 @@ upload_sbe_state(struct brw_context *brw)<br>
    /* _NEW_TRANSFORM */<br>
    int urb_entry_read_offset = ctx-&gt;Transform.ClipPlanesEnabled ? 2 : 1;<br>
    int nr_userclip = brw_count_bits(ctx-&gt;Transform.ClipPlanesEnabled);<br>
-<br>
-   /* _NEW_LIGHT */<br>
-   int two_side_color = (ctx-&gt;Light.Enabled &amp;&amp; ctx-&gt;Light.Model.TwoSide);<br>
    uint16_t attr_overrides[FRAG_ATTRIB_MAX];<br>
<br>
    brw_compute_vue_map(&amp;vue_map, intel, nr_userclip, vs_outputs_written);<br>
@@ -104,7 +101,7 @@ upload_sbe_state(struct brw_context *brw)<br>
<br>
       attr_overrides[input_index++] =<br>
          get_attr_override(&amp;vue_map, urb_entry_read_offset, attr,<br>
-                           two_side_color);<br>
+                           ctx-&gt;VertexProgram._TwoSideEnabled);<br>
    }<br>
<br>
    for (; attr &lt; FRAG_ATTRIB_MAX; attr++)<br>
@@ -276,6 +273,7 @@ upload_sf_state(struct brw_context *brw)<br>
 const struct brw_tracked_state gen7_sf_state = {<br>
    .dirty = {<br>
       .mesa  = (_NEW_LIGHT |<br>
+               _NEW_PROGRAM |<br>
                _NEW_POLYGON |<br>
                _NEW_LINE |<br>
                _NEW_SCISSOR |<br>
<font color="#888888">--<br>
1.7.5.4<br>
<br>
_______________________________________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/mailman/listinfo/mesa-dev</a><br>
</font></blockquote></div><br>For Gen4 and Gen5, similar changes will have to be made to brw_clip.c:<br><br>        switch (ctx-&gt;Polygon.FrontFace) {<br>        case GL_CCW:<br>           key.fill_ccw = fill_front;<br>
           key.fill_cw = fill_back;<br>           key.offset_ccw = offset_front;<br>           key.offset_cw = offset_back;<br>           if (ctx-&gt;Light.Model.TwoSide &amp;&amp;<br>           key.fill_cw != CLIP_CULL) <br>
          key.copy_bfc_cw = 1;<br>           break;<br>        case GL_CW:<br>           key.fill_cw = fill_front;<br>           key.fill_ccw = fill_back;<br>           key.offset_cw = offset_front;<br>           key.offset_ccw = offset_back;<br>
           if (ctx-&gt;Light.Model.TwoSide &amp;&amp;<br>           key.fill_ccw != CLIP_CULL) <br>          key.copy_bfc_ccw = 1;<br>           break;<br>        }<br><br>and to brw_sf.c:<br><br>   key.do_twoside_color = (ctx-&gt;Light.Enabled &amp;&amp; ctx-&gt;Light.Model.TwoSide);<br>
<br>