OSDN Git Service

glcpp: Only disallow #undef of pre-defined macros on GLSL ES >= 3.00 shaders
authorIan Romanick <ian.d.romanick@intel.com>
Tue, 9 Aug 2016 21:32:24 +0000 (14:32 -0700)
committerEmil Velikov <emil.l.velikov@gmail.com>
Thu, 1 Sep 2016 10:39:29 +0000 (11:39 +0100)
commit0c25b3e4b00d6418c0d9c40071debe7727c1b512
treeac54746f8eb960675d6a02592ad55202f07199d4
parente1698fa4553755afa2eecbb8be00b8e5ee8ff8eb
glcpp: Only disallow #undef of pre-defined macros on GLSL ES >= 3.00 shaders

Section 3.4 (Preprocessor) of the GLSL ES 3.00 spec says:

   It is an error to undefine or to redefine a built-in (pre-defined)
   macro name.

The GLSL ES 1.00 spec does not contain this text.

Section 3.3 (Preprocessor) of the GLSL 1.30 spec says:

   #define and #undef functionality are defined as is standard for C++
   preprocessors for macro definitions both with and without macro
   parameters.

At least as far as I can tell GCC allow '#undef __FILE__'.  Furthermore,
there are desktop OpenGL conformance tests that expect '#undef
__VERSION__' and '#undef GL_core_profile' to work.

Fixes:

    GL45-CTS.shaders.preprocessor.definitions.undefine_version_vertex
    GL45-CTS.shaders.preprocessor.definitions.undefine_version_fragment
    GL45-CTS.shaders.preprocessor.definitions.undefine_core_profile_vertex
    GL45-CTS.shaders.preprocessor.definitions.undefine_core_profile_fragment

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Cc: mesa-stable@lists.freedesktop.org
(cherry picked from commit 50b49d242d702e4728329cc59f87d929963e7c53)

Squashed with commit

glcpp: Update tests for new #undef of built-in macro rules.

Ian recently changed the preprocessor to allow this in most GLSL
versions, but not GLSL ES 3.00+.  This patch converts the existing
test that expects a failure to a #version 300 es shader, and adds
a #version 110 shader to make sure that it's allowed.

Fixes 'make check'.

Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=97307
Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Timothy Arceri <timothy.arceri@collabora.com>
Tested-by: Vinson Lee <vlee@freedesktop.org>
(cherry picked from commit 1f47f78fc3193ecff13799305a8e35af82e68a06)
src/compiler/glsl/glcpp/glcpp-parse.y
src/compiler/glsl/glcpp/tests/120-undef-builtin.c
src/compiler/glsl/glcpp/tests/120-undef-builtin.c.expected
src/compiler/glsl/glcpp/tests/147-undef-builtin-allowed.c [new file with mode: 0644]
src/compiler/glsl/glcpp/tests/147-undef-builtin-allowed.c.expected [new file with mode: 0644]