Hi Dave, This regresses interpolation-none-gl_FrontColor-flat-vertex.shader_test piglit test on i915g.
Stéphane On Sat, Jan 7, 2012 at 00:39, Dave Airlie <airl...@kemper.freedesktop.org> wrote: > Module: Mesa > Branch: master > Commit: a103c61d278b7f56208818c4b949c408c00286fa > URL: > http://cgit.freedesktop.org/mesa/mesa/commit/?id=a103c61d278b7f56208818c4b949c408c00286fa > > Author: Dave Airlie <airl...@redhat.com> > Date: Wed Jan 4 11:49:26 2012 +0000 > > st/mesa: add support for clip vertex. > > We need to pass the pre-projection matrix clip planes into the driver, > instead of the post for the case we have a vertex shader that writes clip > vertex. > > Signed-off-by: Dave Airlie <airl...@redhat.com> > > --- > > src/mesa/state_tracker/st_atom_clip.c | 20 ++++++++++++++------ > src/mesa/state_tracker/st_program.c | 4 ++++ > 2 files changed, 18 insertions(+), 6 deletions(-) > > diff --git a/src/mesa/state_tracker/st_atom_clip.c > b/src/mesa/state_tracker/st_atom_clip.c > index 1330db8..236d3cf 100644 > --- a/src/mesa/state_tracker/st_atom_clip.c > +++ b/src/mesa/state_tracker/st_atom_clip.c > @@ -34,7 +34,7 @@ > #include "st_context.h" > #include "pipe/p_context.h" > #include "st_atom.h" > - > +#include "st_program.h" > #include "cso_cache/cso_context.h" > > > @@ -45,15 +45,23 @@ static void update_clip( struct st_context *st ) > struct pipe_clip_state clip; > const struct gl_context *ctx = st->ctx; > GLuint i; > + bool use_eye = FALSE; > > memset(&clip, 0, sizeof(clip)); > > + /* if we have a vertex shader that writes clip vertex we need to pass > + the pre-projection transformed coordinates into the driver. */ > + if (st->vp) { > + if (ctx->Shader.CurrentVertexProgram) > + use_eye = TRUE; > + } > + > for (i = 0; i < PIPE_MAX_CLIP_PLANES; i++) { > if (ctx->Transform.ClipPlanesEnabled & (1 << i)) { > - memcpy(clip.ucp[clip.nr], > - ctx->Transform._ClipUserPlane[i], > - sizeof(clip.ucp[0])); > - clip.nr++; > + memcpy(clip.ucp[clip.nr], > + use_eye ? ctx->Transform.EyeUserPlane[i] : > ctx->Transform._ClipUserPlane[i], > + sizeof(clip.ucp[0])); > + clip.nr++; > } > } > > @@ -69,7 +77,7 @@ static void update_clip( struct st_context *st ) > const struct st_tracked_state st_update_clip = { > "st_update_clip", /* name */ > { /* dirty */ > - (_NEW_TRANSFORM), /* mesa */ > + (_NEW_TRANSFORM | _NEW_PROGRAM), /* mesa */ > 0, /* st */ > }, > update_clip /* update */ > diff --git a/src/mesa/state_tracker/st_program.c > b/src/mesa/state_tracker/st_program.c > index 35d0e0f..8d7469d 100644 > --- a/src/mesa/state_tracker/st_program.c > +++ b/src/mesa/state_tracker/st_program.c > @@ -255,6 +255,10 @@ st_prepare_vertex_program(struct gl_context *ctx, > case VERT_RESULT_EDGE: > assert(0); > break; > + case VERT_RESULT_CLIP_VERTEX: > + stvp->output_semantic_name[slot] = TGSI_SEMANTIC_CLIPVERTEX; > + stvp->output_semantic_index[slot] = 0; > + break; > > case VERT_RESULT_TEX0: > case VERT_RESULT_TEX1: > > _______________________________________________ > mesa-commit mailing list > mesa-com...@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-commit _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev