[Mesa-dev] [PATCH] i965: fix inverted point sprite origin when rendering to FBO
Yuanhan Liu
yuanhan.liu at linux.intel.com
Wed Jan 18 18:09:36 PST 2012
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.liu at 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) {
More information about the mesa-dev
mailing list