<p>Thanks for the reviewed-by.</p>
<p>Ian, would you please help me to push this patch? I&#39;m on the way to home for chines new year, and I can&#39;t access the net(both at home).</p>
<p>Thanks advance!</p>
<p>--<br>
Yuanhan Liu<br>
(Sent by my phone, please forgive the poor format)</p>
<div class="gmail_quote">On Jan 20, 2012 10:25 AM, &quot;Ian Romanick&quot; &lt;<a href="mailto:idr@freedesktop.org">idr@freedesktop.org</a>&gt; wrote:<br type="attribution"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
On 01/19/2012 03:48 PM, Yuanhan Liu wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
When rendering to FBO, rendering is inverted. At the same time, we would<br>
also make sure the point sprite origin is inverted. Or, we will get an<br>
inverted result correspoinding to rendering to the default winsys FBO.<br>
<br>
Bugzilla: <a href="https://bugs.freedesktop.org/show_bug.cgi?id=44613" target="_blank">https://bugs.freedesktop.org/<u></u>show_bug.cgi?id=44613</a><br>
<br>
NOTE: This is a candidate for stable release branches.<br>
<br>
v2: add the simliar logic to ivb, too (comments from Ian)<br>
     simplify the logic operation (comments from Brian)<br>
<br>
v3: pick a better comment from Eric<br>
     use != for the logic instead of ^ (comments from Ian)<br>
<br>
Signed-off-by: Yuanhan Liu&lt;<a href="mailto:yuanhan.liu@linux.intel.com" target="_blank">yuanhan.liu@linux.intel.<u></u>com</a>&gt;<br>
</blockquote>
<br>
Reviewed-by: Ian Romanick &lt;<a href="mailto:ian.d.romanick@intel.com" target="_blank">ian.d.romanick@intel.com</a>&gt;<br>
<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">
---<br>
  src/mesa/drivers/dri/i965/brw_<u></u>defines.h   |    1 +<br>
  src/mesa/drivers/dri/i965/<u></u>gen6_sf_state.c |   13 +++++++++++--<br>
  src/mesa/drivers/dri/i965/<u></u>gen7_sf_state.c |   18 +++++++++++++++---<br>
  3 files changed, 27 insertions(+), 5 deletions(-)<br>
<br>
diff --git a/src/mesa/drivers/dri/i965/<u></u>brw_defines.h b/src/mesa/drivers/dri/i965/<u></u>brw_defines.h<br>
index 4d90a99..029be87 100644<br>
--- a/src/mesa/drivers/dri/i965/<u></u>brw_defines.h<br>
+++ b/src/mesa/drivers/dri/i965/<u></u>brw_defines.h<br>
@@ -1128,6 +1128,7 @@ enum brw_message_target {<br>
  /* DW1 (for gen6) */<br>
  # define GEN6_SF_NUM_OUTPUTS_SHIFT                    22<br>
  # define GEN6_SF_SWIZZLE_ENABLE                               (1&lt;&lt;  21)<br>
+# define GEN6_SF_POINT_SPRITE_UPPERLEFT                        (0&lt;&lt;  20)<br>
  # define GEN6_SF_POINT_SPRITE_LOWERLEFT                       (1&lt;&lt;  20)<br>
  # define GEN6_SF_URB_ENTRY_READ_LENGTH_<u></u>SHIFT          11<br>
  # define GEN6_SF_URB_ENTRY_READ_OFFSET_<u></u>SHIFT          4<br>
diff --git a/src/mesa/drivers/dri/i965/<u></u>gen6_sf_state.c b/src/mesa/drivers/dri/i965/<u></u>gen6_sf_state.c<br>
index 548c5a3..163b54c 100644<br>
--- a/src/mesa/drivers/dri/i965/<u></u>gen6_sf_state.c<br>
+++ b/src/mesa/drivers/dri/i965/<u></u>gen6_sf_state.c<br>
@@ -129,6 +129,7 @@ upload_sf_state(struct brw_context *brw)<br>
     float point_size;<br>
     uint16_t attr_overrides[FRAG_ATTRIB_<u></u>MAX];<br>
     bool userclip_active;<br>
+   uint32_t point_sprite_origin;<br>
<br>
     /* _NEW_TRANSFORM */<br>
     userclip_active = (ctx-&gt;Transform.<u></u>ClipPlanesEnabled != 0);<br>
@@ -258,8 +259,16 @@ upload_sf_state(struct brw_context *brw)<br>
     /* Clamp to the hardware limits and convert to fixed point */<br>
     dw4 |= U_FIXED(CLAMP(point_size, 0.125, 255.875), 3);<br>
<br>
-   if (ctx-&gt;Point.SpriteOrigin == GL_LOWER_LEFT)<br>
-      dw1 |= GEN6_SF_POINT_SPRITE_<u></u>LOWERLEFT;<br>
+   /*<br>
+    * Window coordinates in an FBO are inverted, which means point<br>
+    * sprite origin must be inverted, too.<br>
+    */<br>
+   if ((ctx-&gt;Point.SpriteOrigin == GL_LOWER_LEFT) != render_to_fbo) {<br>
+      point_sprite_origin = GEN6_SF_POINT_SPRITE_<u></u>LOWERLEFT;<br>
+   } else {<br>
+      point_sprite_origin = GEN6_SF_POINT_SPRITE_<u></u>UPPERLEFT;<br>
+   }<br>
+   dw1 |= point_sprite_origin;<br>
<br>
     /* _NEW_LIGHT */<br>
     if (ctx-&gt;Light.ProvokingVertex != GL_FIRST_VERTEX_CONVENTION) {<br>
diff --git a/src/mesa/drivers/dri/i965/<u></u>gen7_sf_state.c b/src/mesa/drivers/dri/i965/<u></u>gen7_sf_state.c<br>
index 7691cb2..da7ef81 100644<br>
--- a/src/mesa/drivers/dri/i965/<u></u>gen7_sf_state.c<br>
+++ b/src/mesa/drivers/dri/i965/<u></u>gen7_sf_state.c<br>
@@ -48,6 +48,9 @@ upload_sbe_state(struct brw_context *brw)<br>
     int urb_entry_read_offset = 1;<br>
     bool userclip_active = (ctx-&gt;Transform.<u></u>ClipPlanesEnabled != 0);<br>
     uint16_t attr_overrides[FRAG_ATTRIB_<u></u>MAX];<br>
+   /* _NEW_BUFFERS */<br>
+   bool render_to_fbo = ctx-&gt;DrawBuffer-&gt;Name != 0;<br>
+   uint32_t point_sprite_origin;<br>
<br>
     brw_compute_vue_map(&amp;vue_map, intel, userclip_active, vs_outputs_written);<br>
     urb_entry_read_length = (vue_map.num_slots + 1)/2 - urb_entry_read_offset;<br>
@@ -65,9 +68,18 @@ upload_sbe_state(struct brw_context *brw)<br>
        urb_entry_read_length&lt;&lt;  GEN7_SBE_URB_ENTRY_READ_<u></u>LENGTH_SHIFT |<br>
        urb_entry_read_offset&lt;&lt;  GEN7_SBE_URB_ENTRY_READ_<u></u>OFFSET_SHIFT;<br>
<br>
-   /* _NEW_POINT */<br>
-   if (ctx-&gt;Point.SpriteOrigin == GL_LOWER_LEFT)<br>
-      dw1 |= GEN6_SF_POINT_SPRITE_<u></u>LOWERLEFT;<br>
+   /* _NEW_POINT<br>
+    *<br>
+    * Window coordinates in an FBO are inverted, which means point<br>
+    * sprite origin must be inverted.<br>
+    */<br>
+   if ((ctx-&gt;Point.SpriteOrigin == GL_LOWER_LEFT) != render_to_fbo) {<br>
+      point_sprite_origin = GEN6_SF_POINT_SPRITE_<u></u>LOWERLEFT;<br>
+   } else {<br>
+      point_sprite_origin = GEN6_SF_POINT_SPRITE_<u></u>UPPERLEFT;<br>
+   }<br>
+   dw1 |= point_sprite_origin;<br>
+<br>
<br>
     dw10 = 0;<br>
     dw11 = 0;<br>
</blockquote>
<br>
______________________________<u></u>_________________<br>
mesa-dev mailing list<br>
<a href="mailto:mesa-dev@lists.freedesktop.org" target="_blank">mesa-dev@lists.freedesktop.org</a><br>
<a href="http://lists.freedesktop.org/mailman/listinfo/mesa-dev" target="_blank">http://lists.freedesktop.org/<u></u>mailman/listinfo/mesa-dev</a><br>
</blockquote></div>