On 8 September 2011 23:32, Eric Anholt <span dir="ltr"><<a href="mailto:eric@anholt.net">eric@anholt.net</a>></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(&t, 0, sizeof(t));<br>
<br>
- /* _NEW_LIGHT */<br>
- if (ctx->Light.Model.TwoSide)<br>
+ /* _NEW_LIGHT | _NEW_PROGRAM */<br>
+ if (ctx->VertexProgram._TwoSideEnabled)<br>
t.twoside = 1;<br>
<br>
for (i = 0; i < 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->intel.ctx.DrawBuffer->Name != 0;<br>
int attr = 0, input_index = 0;<br>
int urb_entry_read_offset;<br>
- int two_side_color = (ctx->Light.Enabled && ctx->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 < 16 || attr == input_index);<br>
<br>
+ /* _NEW_LIGHT | _NEW_PROGRAM */<br>
attr_overrides[input_index++] =<br>
get_attr_override(&vue_map, urb_entry_read_offset, attr,<br>
- two_side_color);<br>
+ ctx->VertexProgram._TwoSideEnabled);<br>
}<br>
<br>
for (; input_index < 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->Transform.ClipPlanesEnabled ? 2 : 1;<br>
int nr_userclip = brw_count_bits(ctx->Transform.ClipPlanesEnabled);<br>
-<br>
- /* _NEW_LIGHT */<br>
- int two_side_color = (ctx->Light.Enabled && ctx->Light.Model.TwoSide);<br>
uint16_t attr_overrides[FRAG_ATTRIB_MAX];<br>
<br>
brw_compute_vue_map(&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(&vue_map, urb_entry_read_offset, attr,<br>
- two_side_color);<br>
+ ctx->VertexProgram._TwoSideEnabled);<br>
}<br>
<br>
for (; attr < 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->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->Light.Model.TwoSide &&<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->Light.Model.TwoSide &&<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->Light.Enabled && ctx->Light.Model.TwoSide);<br>
<br>