On Wed, Jan 18, 2012 at 11:53:20AM -0800, Ian Romanick wrote: > On 01/18/2012 02:23 AM, Yuanhan Liu wrote: > >When rendering to FBO, rendering is inverted. At the same time, we would > >also make sure the point sprite origin is inverted. Or, we will get an > >inverted result correspoinding to rendering to the default winsys FBO. > > > >Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=44613 > > > >Signed-off-by: Yuanhan Liu<yuanhan....@linux.intel.com> > >--- > > src/mesa/drivers/dri/i965/brw_defines.h | 1 + > > src/mesa/drivers/dri/i965/gen6_sf_state.c | 19 +++++++++++++++++-- > > 2 files changed, 18 insertions(+), 2 deletions(-) > > > >diff --git a/src/mesa/drivers/dri/i965/brw_defines.h > >b/src/mesa/drivers/dri/i965/brw_defines.h > >index 4d90a99..029be87 100644 > >--- a/src/mesa/drivers/dri/i965/brw_defines.h > >+++ b/src/mesa/drivers/dri/i965/brw_defines.h > >@@ -1128,6 +1128,7 @@ enum brw_message_target { > > /* DW1 (for gen6) */ > > # define GEN6_SF_NUM_OUTPUTS_SHIFT 22 > > # define GEN6_SF_SWIZZLE_ENABLE (1<< 21) > >+# define GEN6_SF_POINT_SPRITE_UPPERLEFT (0<< 20) > > # define GEN6_SF_POINT_SPRITE_LOWERLEFT (1<< 20) > > # define GEN6_SF_URB_ENTRY_READ_LENGTH_SHIFT 11 > > # define GEN6_SF_URB_ENTRY_READ_OFFSET_SHIFT 4 > >diff --git a/src/mesa/drivers/dri/i965/gen6_sf_state.c > >b/src/mesa/drivers/dri/i965/gen6_sf_state.c > >index 548c5a3..d354a2b 100644 > >--- a/src/mesa/drivers/dri/i965/gen6_sf_state.c > >+++ b/src/mesa/drivers/dri/i965/gen6_sf_state.c > > I think gen7_sf_state.c needs similar changes. Yeah, you are right.
> > >@@ -129,6 +129,7 @@ upload_sf_state(struct brw_context *brw) > > float point_size; > > uint16_t attr_overrides[FRAG_ATTRIB_MAX]; > > bool userclip_active; > >+ int point_sprite_origin; > > dw1 is a uint32_t, so this should be too. Yes. Will sent an updated patch soon. > > > > > /* _NEW_TRANSFORM */ > > userclip_active = (ctx->Transform.ClipPlanesEnabled != 0); > >@@ -258,8 +259,22 @@ upload_sf_state(struct brw_context *brw) > > /* Clamp to the hardware limits and convert to fixed point */ > > dw4 |= U_FIXED(CLAMP(point_size, 0.125, 255.875), 3); > > > >- if (ctx->Point.SpriteOrigin == GL_LOWER_LEFT) > >- dw1 |= GEN6_SF_POINT_SPRITE_LOWERLEFT; > >+ /* > >+ * When rendering to FBO, rendering is inverted. At the same time, > >+ * we would also make sure the point sprite origin is inverted. > >+ * Or, we will get an inverted result corresponding to rendering > >+ * to the default/window FBO. > >+ */ > >+ if (ctx->Point.SpriteOrigin == GL_LOWER_LEFT) { > >+ point_sprite_origin = GEN6_SF_POINT_SPRITE_LOWERLEFT; > >+ if (render_to_fbo) > >+ point_sprite_origin = GEN6_SF_POINT_SPRITE_UPPERLEFT; > >+ } else { > >+ point_sprite_origin = GEN6_SF_POINT_SPRITE_UPPERLEFT; > >+ if (render_to_fbo) > >+ point_sprite_origin = GEN6_SF_POINT_SPRITE_LOWERLEFT; > >+ } > >+ dw1 |= point_sprite_origin; > > > > /* _NEW_LIGHT */ > > if (ctx->Light.ProvokingVertex != GL_FIRST_VERTEX_CONVENTION) { _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev