[Mesa-dev] A few fixes for the preprocessor for GLSL 1.30
Kenneth Graunke
kenneth at whitecape.org
Thu Sep 29 23:43:49 PDT 2011
On 09/29/2011 11:00 PM, Carl Worth wrote:
> Eric recentl mentioned to me that when setting the following
> environment variables with current master mesa:
>
> MESA_GL_VERSION_OVERRIDE=3.0
> MESA_GLSL_VERSION_OVERRIDE=130
>
> that 8 piglit preprocessor tests start to fail.
>
> I've investigated all of these failures and am here attaching a patch
> series for review that fixes 5 of them. In the testing I've done, I
> don't see any changes from this patch series other than the desired
> piglit fixes. But, of course, I'd be happy for any review.
For the series:
Reviewed-by: Kenneth Graunke <kenneth at whitecape.org>
Thanks for fixing these, Carl!
> For the remaining three failures, I believe the tests themselves are
> broken and should be fixed. These fall into two case:
>
> 1. feature-macros/gl_gragment_precision_high.{frag,vert}
>
> In these tests, the actual preprocessor functionality being tested,
> (that a directive of #version 130 causes the
> GL_FRAGMENT_PRECISION_HIGH macro to be pre-defined), is working fine.
>
> The tests are failing due to the following code:
>
> float f() { return 0; }
>
> Our implementation does not currently do implicit promotion here,
> so compilation fails with a type error:
>
> error: `return' with wrong type int, in function `f' returning
> float
>
> The GLSL specification is not explicit on whether this promotion
> should be happening, but other implementations appear to do it. So
> perhaps the promotion should be added to our implementation.
Odd. I could've sworn that was allowed (it would make sense), but
you're right: the spec never explicitly allows that, so strictly, it's
forbidden.
GLSL 4.20 and the GL_ARB_shading_language_420pack extension explicitly
add this functionality to the shading language, so we can add it then.
I guess we could technically add GL_ARB_shading_language_420pack support
now, since it only requires GLSL 1.30...it's essentially an extension
that backports some new front-end functionality and clarifications to
older versions of GLSL.
In any case, I'm in favor of changing the test to 0.0 instead of 0.
> Meanwhile, the test could legitimately be fixed to remove the type
> error which is a side issue from what the test is actually trying
> to do.
>
> 2. if/if-arg-must-be-defined-02.frag
>
> This test is trying to elicit an "undefined macro" error with
> something like the following code:
>
> #if 1
> ...
> #elif UNDEFINED_MACRO
> ...
> #endif
>
> I propose changing the test to use "#if 0" instead, in which case
> the current implementation would pass. It's not actually desirable
> to generate an error in the above case. Consider a use of a
> possibly undefined macro:
I agree with your analysis here. I am in favor of changing the test to
"#if 0", as you suggest.
> #if PERHAPS_UNDEFINED < 5
> ...
> #endif
>
> In order to protect this use, the user might add something like the
> following (or similar with #ifndef):
>
> #if ! defined PERHAPS_UNDEFINED
> ... deal with it ...
> #elif PERHAPS_UNDEFINED
> ...
> #endif
>
> In this case, the user's expectation is to get no error with this
> code. Yet this is precisly the formulation the current test case
> uses to elicit the error.
>
> I'll be glad to push changes to piglit to fix these cases unless
> someone can argue aginst that.
Nope, sounds good to me. Thanks!
> Thanks,
>
> -Carl
More information about the mesa-dev
mailing list