mesa/src/compiler/glsl/glcpp
Ian Romanick 695b04f7eb glsl: Add "built-in" functions to do 64%64 => 64 modulus
These functions are directly available in shaders.  A #define is added
to detect the presence.  This allows these functions to be tested using
piglit regardless of whether the driver uses them for lowering.  The
GLSL spec says that functions and macros beginning with __ are reserved
for use by the implementation... hey, that's us!

v2: Use function inlining.

Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Matt Turner <mattst88@gmail.com>
2017-01-20 15:41:23 -08:00
..
tests glcpp: Remove illegal characters from tests 2017-01-04 14:40:48 -08:00
.gitignore glsl: move to compiler/ 2016-01-26 16:08:33 +00:00
glcpp-lex.l glcpp: Allow vertical tab and form feed characters in GLSL 2017-01-04 14:40:48 -08:00
glcpp-parse.y glsl: Add "built-in" functions to do 64%64 => 64 modulus 2017-01-20 15:41:23 -08:00
glcpp.c glsl: reuse main extension table to appropriately restrict extensions 2016-07-23 13:48:04 -04:00
glcpp.h glsl: Add "built-in" functions to do 64x64 => 64 multiplication 2017-01-20 15:41:23 -08:00
pp.c glsl: Add "built-in" functions to do 64x64 => 64 multiplication 2017-01-20 15:41:23 -08:00
README glsl: move to compiler/ 2016-01-26 16:08:33 +00:00

glcpp -- GLSL "C" preprocessor

This is a simple preprocessor designed to provide the preprocessing
needs of the GLSL language. The requirements for this preprocessor are
specified in the GLSL 1.30 specification availble from:

http://www.opengl.org/registry/doc/GLSLangSpec.Full.1.30.10.pdf

This specification is not precise on some semantics, (for example,
#define and #if), defining these merely "as is standard for C++
preprocessors". To fill in these details, I've been using a draft of
the C99 standard as available from:

http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1256.pdf

Any downstream compiler accepting output from glcpp should be prepared
to encounter and deal with the following preprocessor macros:

	#line
	#pragma
	#extension

All other macros will be handled according to the GLSL specification
and will not appear in the output.

Known limitations
-----------------
A file that ends with a function-like macro name as the last
non-whitespace token will result in a parse error, (where it should be
passed through as is).