[Mesa-dev] gl_NormalMatrix issue on Intel driver
tom fogal
tfogal at sci.utah.edu
Tue Oct 11 13:21:32 PDT 2011
Ian Romanick <idr at freedesktop.org> writes:
> On 10/10/2011 03:30 PM, tom fogal wrote:
> > One of our programs which relies on shaders heavily is having
> > issues, and I have tracked it down to unexpected values in
> > gl_NormalMatrix within the fragment shader.
> >
> > Using the attached program (patch against mesademos repo) I did
> > printf-esque debugging to get the values of gl_NormalMatrix.
> > Search for 'fragShaderText' to see the shaders I'm using. I get
> > different results on a Mesa 7.10.2 (Ubuntu 11.04) system with an
> > Intel card versus an nvidia-binary-blob system. The nvidia-based
> > system also agrees with what I get using any card on a Mac and
> > nvidia or ATI cards on Windows (native drivers, not Mesa); we have
> > no results for Windows/Intel yet.
> >
> > nvidia intel
> > [ 1.0 0.0 0.0 ] [ 1.0 0.0 0.0 ]
> > [ 0.0 -0.0 1.0 ] [ 0.0 0.0>0.0,<0.0001 ]
> > [ 0.0 -1.0 -0.0 ] [ 1.0 15.0 0.0 ]
> >
> > I used "-0.0" for a couple slots on the nvidia system; the value
> > was smaller than 0.0, but larger than 0-epsilon for some small
> > epsilon, similar to gl_NormalMatrix[1].z on intel but in the
> > opposite direction.
> >
> > I spot-checked gl_NormalMatrix[2].y with LIBGL_ALWAYS_SOFTWARE=1.
> > In that case, Mesa agrees with the nvidia driver: the value is
> > -1.0. My application also produces imagery identical (via a
> > subjective eye test, haven't tried image differencing the two) to
> > the nvidia system when I run it with LIBGL_ALWAYS_SOFTWARE=1.
>
> I think I see what the test is trying to produce. Basically, it's
> checking columns of the matrix to see if they match expected values.
> If a particular column doesn't match, a certain color is output.
Yeah, exactly; I was just modifying the 'if' conditional, recompiling,
looking at the color, goto 10 ...
> I think we could make a more general piglit test the reproduce this
> sort of failure. Something like:
The issue I find with shaders and specifically this is that what I
really want to do is:
if(!within_epsilon(gl_NormalMatrix[0].x, expected)) {
printf("[0][0] produced %g instead of %g, gl_NormalMatrix[0].x, expected);
}
...
but of course you can't printf anything in a shader. Your test program
is along the same lines... I guess there must be a way in piglit to say
we expect a color to be a particular value? Via say glReadPixels?
I haven't pulled piglit in well over a year. I'll take a look at how
those tests work and try to generate a test program for that repo after
this email.
> > On the intel system:
> >
> > GL_VENDOR: Tungsten Graphics, Inc
> > GL_RENDERER: Mesa DRI Intel(R) Sandybridge Desktop GEM 20100330 DEVELOPM
> ENT
> > GL_VERSION: 2.1 Mesa 7.10.2
> >
> > From 'dmesg', I gather the GPU is an i915.
>
> Sandybridge is the most recently released GPU in the i965 family. It
> shares the i915 kernel driver with several earlier GPUs.
Ahh, okay; it was confusing because I /knew/ an i965 existed and
was 'better' than an i915, and we just recently bought this machine
specifically to get our code running on Intel cards.
Thanks for the clarification!
> > Is this a known issue? Any workarounds available? Anything else I
> > could do to help debug?
>
> Yikes! A *lot* has changed in the fragment shader back-end for i965
> since 7.10.2. Have you at least tried 7.10.3? 7.11?
I have not. To be honest, I am pretty daunted by trying a new X
driver. I don't quite understand the interaction between drm, the
kernel, X proper, and Mesa to know what needs to be compiled, nor have
I ever found good documentation on how to swap out my driver on either
mesa3d.org or intellinuxgraphics.org.
I am completely comfortable compiling/trying out master, even, if I
knew how... can I just LD_PRELOAD the new libGL, perhaps?
> Also, the changes to the Makefile don't seem to be sufficient to make
> it build for me. I had to just build it by hand.
The diff only changed CMakeLists.txt; you'd need to re-run cmake for it
to pick up on it. I didn't actually intend for it to get merged into
mesademos, but if that's desired I can patch the GBS in that tree as
well.
Thanks,
-tom
More information about the mesa-dev
mailing list