[Mesa-dev] Using the 'f' suffix to create a float from an integer literal

Ian Romanick idr at freedesktop.org
Wed Nov 19 10:27:04 PST 2014

On 11/19/2014 03:47 AM, Iago Toral Quiroga wrote:
> Hi,
> I came across a GLSL test that checks that doing something like this in
> a shader should fail:

Is this one of the dEQP tests?

> float value = 1f;

It seems like we have a test related to this in piglit somewhere... it
looks like tests/shaders/glsl-floating-constant-120.shader_test uses
that syntax, but it's not explicitly testing that feature.

> However, this works fine in Mesa. Checking the spec I  see:
> Floating-point constants are defined as follows.
>      floating-constant:
>            fractional-constant exponent-part(opt) floating-suffix(opt)
>            digit-sequence exponent-part floating-suffix(opt)
>      fractional-constant:
>            digit-sequence . digit-sequence
>            digit-sequence .
>            . digit-sequence
>      exponent-part:
>            e sign(opt) digit-sequence
>            E sign(opt) digit-sequence
>      sign: one of
>            + -
>      digit-sequence:
>            digit
>            digit-sequence digit
>      floating-suffix: one of
>            f F
> which suggests that the test is correct and Mesa has a bug. According to
> the above rules, however, something like this is fine:
> float f = 1e2f;
> which I find kind of weird if the other case is not valid, so I wonder
> if there is a bug in the spec or this is on purpose for some reason that
> I am missing.
> Then, to make matters worse, I read this in opengl.org wiki [1]:
> "A numeric literal that uses a decimal is by default of type float​. To
> create a float literal from an integer value, use the suffix f​ or F​ as
> in C/C++."
> which contradicts the spec and the test and is aligned with the current
> way Mesa works.
> So: does anyone know what version is right? Could this be a bug in the
> spec? and if it is not, do we want to change the behavior to follow the
> spec as it is now?

The $64,000 question: What do other GLSL compilers (including, perhaps,
glslang) do?  This seems like one of the cases where nobody is likely to
follow the spec, and some application will depend on that.  If that's
the case, I'll submit a spec bug.

> Thanks,
> Iago
> [1] https://www.opengl.org/wiki/Data_Type_%28GLSL%29
> _______________________________________________
> mesa-dev mailing list
> mesa-dev at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/mesa-dev

More information about the mesa-dev mailing list