summaryrefslogtreecommitdiff
path: root/src/glsl
AgeCommit message (Collapse)Author
2011-01-13glsl: Emit errors or warnings when 'layout' is used with 'attribute' or ↵Ian Romanick
'varying' The specs that add 'layout' require the use of 'in' or 'out'. However, a number of implementations, including Mesa, shipped several of these extensions allowing the use of 'varying' and 'attribute'. For these extensions only a warning is emitted. This differs from the behavior of Mesa 7.10. Mesa 7.10 would only accept 'attribute' with 'layout(location)'. This behavior was clearly wrong. Rather than carrying the broken behavior forward, we're just doing the correct thing. This is related to (piglit) bugzilla #31804. NOTE: This is a candidate for the 7.9 and 7.10 branches.
2011-01-13glsl: Allow 'in' and 'out' when 'layout' is also availableIan Romanick
All of the extensions that add the 'layout' keyword also enable (and required) the use of 'in' and 'out' with shader globals. This is related to (piglit) bugzilla #31804. NOTE: This is a candidate for the 7.9 and 7.10 branches.
2011-01-13scons: Fix cross-compilation.José Fonseca
Hairy stuff. Don't know how to do it better though.
2011-01-12glsl/s_expression: Read and ignore Scheme-style comments.Kenneth Graunke
A single-semicolon until the end of the line, i.e. ; this is a comment.
2011-01-12glsl/builtins: Remove unnecessary (constant bool (1)) from assignments.Kenneth Graunke
This isn't strictly necessary, but is definitely nicer.
2011-01-12ir_reader: Make assignment conditions optional.Kenneth Graunke
You can now simply write (assign (xy) <lhs> <rhs>) instead of the verbose (assign (constant bool (1)) (xy) <lhs> <rhs>).
2011-01-12ir_reader: Convert to a class.Kenneth Graunke
This makes it unnecessary to pass _mesa_glsl_parse_state around everywhere, making at least the prototypes a lot easier to read. It's also more C++-ish than a pile of static C functions.
2011-01-12ir_reader: Combine the three dereference reading functions into one.Kenneth Graunke
These used to be more complicated, but now are so simple there's no real point in keeping them separate.
2011-01-12ir_reader: Relax requirement that function arguments be s_lists.Kenneth Graunke
All of these functions used to take s_list pointers so they wouldn't all need SX_AS_LIST conversions and error checking. However, the new pattern matcher conveniently does this for us in one centralized place. So there's no need to insist on s_list. Switching to s_expression saves a bit of code and is somewhat cleaner.
2011-01-12ir_reader: Remove s_list::length() method.Kenneth Graunke
Most code now relies on the pattern matcher rather than this function, and for the only remaining case, not using this saves an iteration.
2011-01-12ir_reader: Add a pattern matching system and use it everywhere.Kenneth Graunke
Previously, the IR reader was riddled with code that: 1. Checked for the right number of list elements (via a linked list walk) 2. Retrieved references to each component (via ->next->next pointers) 3. Downcasted as necessary to make sure that each sub-component was the right type (i.e. symbol, int, list). 4. Checking that the tag (i.e. "declare") was correct. This was all very ad-hoc and a bit ugly. Error checking had to be done at both steps 1, 3, and 4. Most code didn't even check the tag, relying on the caller to do so. Not all callers did. The new pattern matching module performs the whole process in a single straightforward function call, resulting in shorter, more readable code. Unfortunately, MSVC does not support C99-style anonymous arrays, so the pattern must be declared outside of the match call.
2011-01-12glsl: remove trailing comma to silence warningBrian Paul
2011-01-12glsl/Makefile: Fix build with --as-needed.Kenneth Graunke
2011-01-12glsl: Track variable usage, use that to enforce semanticsIan Romanick
In particular, variables cannot be redeclared invariant after being used. Fixes piglit test invariant-05.vert and bugzilla #29164. NOTE: This is a candidate for the 7.9 and 7.10 branches.
2011-01-12generate_builtins.py: Add missing import.Vinson Lee
Import sys for sys.exit.
2011-01-12glsl: Make builtin_compiler build on Windows with MSVC.José Fonseca
2011-01-12glsl: Make builtin_compiler portable for non-unices.José Fonseca
2011-01-12getopt: Import OpenBSD getopt implementation for MSVC.José Fonseca
2011-01-11glsl: Add type inference support for remaining expression opcodes.Kenneth Graunke
2011-01-11glsl: Fix the lowering of variable array indexing to not lose write_masks.Eric Anholt
Fixes glsl-complex-subscript on 965.
2011-01-10glsl: Autogenerate builtin_functions.cpp as part of the build process.Kenneth Graunke
Python is already necessary for other parts of Mesa, so there's no reason we can't just generate it. This patch updates both make and SCons to do so.
2011-01-10glsl: Disallow 'in' and 'out' on globals in GLSL 1.20Ian Romanick
Fixes piglit tests glsl-1.20/compiler/qualifiers/in-01.vert and glsl-1.20/compiler/qualifiers/out-01.vert and bugzilla #32910. NOTE: This is a candidate for the 7.9 and 7.10 branches. This patch also depends on the previous two commits.
2011-01-10glsl: Refresh autogenerated parser file.Ian Romanick
For the previous commit.
2011-01-10glsl: Add version_string containing properly formatted GLSL versionIan Romanick
2011-01-10glcpp: Refresh autogenerated lexer and parser files.Ian Romanick
For the previous commit.
2011-01-10glcpp: Generate an error for division by zeroIan Romanick
When GCC encounters a division by zero in a preprocessor directive, it generates an error. Since the GLSL spec says that the GLSL preprocessor behaves like the C preprocessor, we should generate that same error. It's worth noting that I cannot find any text in the C99 spec that says this should be an error. The only text that I can find is line 5 on page 82 (section 6.5.5 Multiplicative Opertors), which says, "The result of the / operator is the quotient from the division of the first operand by the second; the result of the % operator is the remainder. In both operations, if the value of the second operand is zero, the behavior is undefined." Fixes 093-divide-by-zero.c test and bugzilla #32831. NOTE: This is a candidate for the 7.9 and 7.10 branches.
2011-01-10glcpp: Regenerate glcpp-parse.cChad Versace
2011-01-10glcpp: Fix segfault when validating macro redefinitionsChad Versace
In _token_list_equal_ignoring_space(token_list_t*, token_list_t*), add a guard that prevents dereferncing a null token list. This fixes test src/glsl/glcpp/tests/092-redefine-macro-error-2.c and Bugzilla #32695.
2011-01-10glsl: At link-time, check that globals have matching centroid qualifiersChad Versace
Fixes bug 31923: http://bugs.freedesktop.org/show_bug.cgi?id=31923
2011-01-06glsl: Refresh autogenerated lexer and parser files.Ian Romanick
For the previous commit.
2011-01-06glsl: Support the 'invariant(all)' pragmaIan Romanick
Previously the 'STDGL invariant(all)' pragma added in GLSL 1.20 was simply ignored by the compiler. This adds support for setting all variable invariant. In GLSL 1.10 and GLSL ES 1.00 the pragma is ignored, per the specs, but a warning is generated. Fixes piglit test glsl-invariant-pragma and bugzilla #31925. NOTE: This is a candidate for the 7.9 and 7.10 branches.
2011-01-06glsl: Allow less restrictive uses of sampler array indexing in GLSL <= 1.20Ian Romanick
GLSL 1.10 and 1.20 allow any sort of sampler array indexing. Restrictions were added in GLSL 1.30. Commit f0f2ec4d added support for the 1.30 restrictions, but it broke some valid 1.10/1.20 shaders. This changes the error to a warning in GLSL 1.10, GLSL 1.20, and GLSL ES 1.00. There are some spurious whitespace changes in this commit. I changed the layout (and wording) of the error message so that all three cases would be similar. The 1.10/1.20 and 1.30 text is the same. The only difference is that one is an error, and the other is a warning. The GLSL ES 1.00 wording is similar but not quite the same. Fixes piglit test spec/glsl-1.10/compiler/constant-expressions/sampler-array-index-02.frag and bugzilla #32374.
2011-01-04glcpp: Add test for recursive #define.Vinson Lee
2011-01-04glcpp: Add division by zero test cases.Vinson Lee
2011-01-04glsl: Check that integer vertex outputs are qualified with flatChad Versace
Perform this check in ast_declarator_list::hir(). From section 4.3.6 of the GLSL 1.30 spec: "If a vertex output is a signed or unsigned integer or integer vector, then it must be qualified with the interpolation qualifier flat."
2011-01-04glsl: Allow redeclaration of gl_Color and its variants in GLSL 1.30Chad Versace
Allow redeclaration of the following built-in variables with an interpolation qualifier in language versions >= 1.30: * gl_FrontColor * gl_BackColor * gl_FrontSecondaryColor * gl_BackSecondaryColor * gl_Color * gl_SecondaryColor See section 4.3.7 of the GLSL 1.30 spec.
2011-01-04glsl: Comment ast_type_qualifier.flagsChad Versace
2011-01-01glsl: Really remove unused "instructions" parameter.Kenneth Graunke
I forgot about this file, and it didn't show up until I tried to do "make builtins" from a clean build.
2011-01-01glsl: Remove unused "instructions" parameter.Kenneth Graunke
I think was used long ago, when we actually read the builtins into the shader's instruction stream directly, rather than creating a separate shader and linking the two. It doesn't seem to serve any purpose now.
2010-12-27glcpp: Add negative tests for redefintions with valueless macros.Vinson Lee
2010-12-27glsl: Support if-flattening beyond a given maximum nesting depth.Kenneth Graunke
This adds a new optional max_depth parameter (defaulting to 0) to lower_if_to_cond_assign, and makes the pass only flatten if-statements nested deeper than that. By default, all if-statements will be flattened, just like before. This patch also renames do_if_to_cond_assign to lower_if_to_cond_assign, to match the new naming conventions.
2010-12-17Refresh autogenerated file builtin_function.cpp.Kenneth Graunke
NOTE: The 7.9 and 7.10 branches will need their builtins refreshed too. Rather than cherry-picking this commit, run 'make builtins'.
2010-12-17glsl/builtins: Compute the correct value for smoothstep(vec, vec, vec).Kenneth Graunke
These mistakenly computed 't' instead of t * t * (3.0 - 2.0 * t). Also, properly vectorize the smoothstep(float, float, vec) variants. NOTE: This is a candidate for the 7.9 and 7.10 branches.
2010-12-17glsl: Expose a public glsl_type::void_type const pointer.Kenneth Graunke
This is analogous to glsl_type::int_type and all the others.
2010-12-14glsl: new glsl_strtod() wrapper to fix decimal point interpretationBrian Paul
We always want to use '.' as the decimal point. See http://bugs.freedesktop.org/show_bug.cgi?id=24531 NOTE: this is a candidate for the 7.10 branch.
2010-12-13linker: Allow built-in arrays to have different sizes between shader stagesIan Romanick
Fixes pitlit test glsl-link-varying-TexCoord (bugzilla #31650).
2010-12-10glsl: Inherrit type of declared variable from initializer after processing ↵Ian Romanick
assignment do_assignment may apply implicit conversions to coerce the base type of initializer to the base type of the variable being declared. Fixes piglit test glsl-implicit-conversion-02 (bugzilla #32287). This probably also fixes bugzilla #32273. NOTE: This is a candidate for the 7.9 branch and the 7.10 branch.
2010-12-10glsl: Minor clean-up in validate_assignmentIan Romanick
This code has been changed around a lot, and there were some temporary variables left around from previous versions.
2010-12-09glsl: Unroll loops with conditional breaks anywhere (not just the end)Luca Barbieri
Currently we only unroll loops with conditional breaks at the end, which is the form that lower_jumps generates. However, if breaks are not lowered, they tend to appear at the beginning, so add support for a conditional break anywhere. Signed-off-by: Luca Barbieri <luca@luca-barbieri.com> Signed-off-by: Kenneth Graunke <kenneth@whitecape.org>
2010-12-09glsl: Consider the "else" branch when looking for loop breaks.Kenneth Graunke
Found this bug by code inspection. Based off the comments just before this code, the intent is to find whether the break exists in the "then" branch or the "else" branch. However, the code actually looked at the last instruction in the "then" branch twice.