On 2 September 2011 13:57, 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;">
<div class="im">On Fri,  2 Sep 2011 09:07:00 -0700, Paul Berry &lt;<a href="mailto:stereotype441@gmail.com">stereotype441@gmail.com</a>&gt; wrote:<br>
&gt; This patch changes get_attr_override() (which computes the<br>
&gt; relationship between vertex shader outputs and fragment shader inputs)<br>
&gt; to use the VUE map.<br>
&gt; ---<br>
&gt;  src/mesa/drivers/dri/i965/brw_state.h     |    3 +-<br>
&gt;  src/mesa/drivers/dri/i965/gen6_sf_state.c |  108 +++++++++++++++++------------<br>
&gt;  src/mesa/drivers/dri/i965/gen7_sf_state.c |   13 +++-<br>
&gt;  3 files changed, 75 insertions(+), 49 deletions(-)<br>
&gt;<br>
&gt; diff --git a/src/mesa/drivers/dri/i965/brw_state.h b/src/mesa/drivers/dri/i965/brw_state.h<br>
&gt; index cede4e5..167134b 100644<br>
&gt; --- a/src/mesa/drivers/dri/i965/brw_state.h<br>
&gt; +++ b/src/mesa/drivers/dri/i965/brw_state.h<br>
&gt; @@ -206,7 +206,8 @@ void upload_default_color(struct brw_context *brw,<br>
&gt;<br>
&gt;  /* gen6_sf_state.c */<br>
&gt;  uint32_t<br>
&gt; -get_attr_override(struct brw_context *brw, int fs_attr, int two_side_color);<br>
&gt; +get_attr_override(struct brw_vue_map *vue_map, int urb_entry_read_offset,<br>
&gt; +                  int fs_attr);<br>
&gt;<br>
&gt;  /* gen7_misc_state.c */<br>
&gt;  unsigned int<br>
&gt; diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c b/src/mesa/drivers/dri/i965/gen6_sf_state.c<br>
&gt; index 714914a..5e121f7 100644<br>
&gt; --- a/src/mesa/drivers/dri/i965/gen6_sf_state.c<br>
&gt; +++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c<br>
<br>
</div><div class="im">&gt; +   if (vs_attr &lt; 0 || vs_attr == VERT_RESULT_HPOS) {<br>
&gt; +      /* These attributes will be overwritten by the fragment shader&#39;s<br>
&gt; +       * interpolation code (see emit_interp() in brw_wm_fp.c), so just let<br>
&gt; +       * them reference attribute the first available attribute.<br>
&gt; +       */<br>
&gt; +      return 0;<br>
<br>
</div>One too many attributes in that comment.<br></blockquote><div><br>Oops, I&#39;ll extra delete the extra word.<br> </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">

<div class="im"><br>
&gt; +   /* Compute the location of the attribute relative to urb_entry_read_offset.<br>
&gt; +    * Each increment of urb_entry_read_offset represents a 256-bit value, so<br>
&gt; +    * it counts for two 128-bit VUE slots.<br>
&gt; +    */<br>
&gt; +   attr_override = slot - 2*urb_entry_read_offset;<br>
<br>
</div>I like spaces between binary operators unless you&#39;re really hurting for<br>
space.<br></blockquote><div><br>Yeah, I flip flop on whether to put spaces around &quot;*&quot;.  The programmer in me wants the spaces, the mathematician in me deplores them.  I guess I was feeling like a mathematician when I wrote this line.<br>
 </div><blockquote class="gmail_quote" style="margin: 0pt 0pt 0pt 0.8ex; border-left: 1px solid rgb(204, 204, 204); padding-left: 1ex;">
<div class="im"><br>
&gt; +   assert (attr_override &gt;= 0 &amp;&amp; attr_override &lt; 32);<br>
&gt;<br>
&gt; -   return attr_index;<br>
&gt; +   /* If the VUE slot following this one represents a back-facing color, then<br>
&gt; +    * we need to instruct the SF unit to do back-facing swizzling.<br>
&gt; +    */<br>
&gt; +   if (vue_map-&gt;slot_to_vert_result[slot] == VERT_RESULT_COL0 &amp;&amp;<br>
&gt; +       vue_map-&gt;slot_to_vert_result[slot+1] == VERT_RESULT_BFC0)<br>
&gt; +      attr_override |= (ATTRIBUTE_SWIZZLE_INPUTATTR_FACING &lt;&lt; ATTRIBUTE_SWIZZLE_SHIFT);<br>
&gt; +   else if (vue_map-&gt;slot_to_vert_result[slot] == VERT_RESULT_COL1 &amp;&amp;<br>
&gt; +            vue_map-&gt;slot_to_vert_result[slot+1] == VERT_RESULT_BFC1)<br>
&gt; +      attr_override |= (ATTRIBUTE_SWIZZLE_INPUTATTR_FACING &lt;&lt; ATTRIBUTE_SWIZZLE_SHIFT);<br>
&gt; +<br>
&gt; +   return attr_override;<br>
<br>
</div>I think that this is the wrong criteria for backface color swizzle, not<br>
that it&#39;s a new bug you&#39;re introducing.  We need some tests for this.<br>