[Mesa-dev] [PATCH] st_program.c: gl_ClipDistance must be interpolated in 3d space.
Paul Berry
stereotype441 at gmail.com
Mon Jul 2 14:19:04 PDT 2012
On 2 July 2012 13:45, Vadim Girlin <vadimgirlin at gmail.com> wrote:
> On Mon, 2012-07-02 at 10:08 -0700, Paul Berry wrote:
> > On 2 July 2012 08:04, Vadim Girlin <vadimgirlin at gmail.com> wrote:
> > On Sun, 2012-06-24 at 11:18 +0200, Olivier Galibert wrote:
> > > That old bug was hidden but the clipper always interpolating
> > in 3d
> > > space no matter what it should have been doing. Now that
> > the
> > > interpolation has been fixed, the bug shows up.
> > >
> > > Fixes bugzilla 51364.
> > >
> > > Signed-off-by: Olivier Galibert <galibert at pobox.com>
> > >
> > > diff --git a/src/mesa/state_tracker/st_program.c
> > b/src/mesa/state_tracker/st_program.c
> > > index e6664fb..9f98298 100644
> > > --- a/src/mesa/state_tracker/st_program.c
> > > +++ b/src/mesa/state_tracker/st_program.c
> > > @@ -569,12 +569,12 @@ st_translate_fragment_program(struct
> > st_context *st,
> > > case FRAG_ATTRIB_CLIP_DIST0:
> > > input_semantic_name[slot] =
> > TGSI_SEMANTIC_CLIPDIST;
> > > input_semantic_index[slot] = 0;
> > > - interpMode[slot] = TGSI_INTERPOLATE_LINEAR;
> > > + interpMode[slot] =
> > TGSI_INTERPOLATE_PERSPECTIVE;
> > > break;
> > > case FRAG_ATTRIB_CLIP_DIST1:
> > > input_semantic_name[slot] =
> > TGSI_SEMANTIC_CLIPDIST;
> > > input_semantic_index[slot] = 1;
> > > - interpMode[slot] = TGSI_INTERPOLATE_LINEAR;
> > > + interpMode[slot] =
> > TGSI_INTERPOLATE_PERSPECTIVE;
> >
> >
> > At first glance this change doesn't seem correct, GLSL 1.30
> > spec says
> > that clip distances are interpolated linearly. Am I missing
> > something?
> >
> > I think when the spec says "The clip distances will be linearly
> > interpolated across the primitive...", they mean "linear in 3D space".
> > Interpolating clip distances in screen space would produce really bad
> > artifacts, IMHO.
>
> Looking into it, I think you are right, sorry for the noise.
>
> Though then I have some doubts about the "fs-clip-distance-interpolated"
> test. AFAICS r600g in fact uses different interpolation for ClipDistance
> inputs with and without the patch, but the test does pass in both
> cases.
>
Yeah, fs-clip-distance-interpolated only checks that the fragment shader
sees properly interpolated values for gl_ClipDistance. It doesn't check
that the implementation uses the correct form of interpolation to decide
where to clip the primitive. I suspect that's the reason the test passes
in both cases. I wasn't thinking carefully enough when I wrote the test to
realize that these two things ought to be tested separately.
If you would like to add a piglit test to cover the case I missed, I would
be delighted :)
>
> Vadim
>
> >
> >
> > Vadim
> >
> > > break;
> > > /* In most cases, there is nothing special
> > about these
> > > * inputs, so adopt a convention to use the
> > generic
> > > _______________________________________________
> > > mesa-dev mailing list
> > > mesa-dev at lists.freedesktop.org
> > > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> >
> >
> >
> > _______________________________________________
> > mesa-dev mailing list
> > mesa-dev at lists.freedesktop.org
> > http://lists.freedesktop.org/mailman/listinfo/mesa-dev
> >
> >
>
>
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.freedesktop.org/archives/mesa-dev/attachments/20120702/377eec73/attachment.html>
More information about the mesa-dev
mailing list