summaryrefslogtreecommitdiffstats
path: root/src/glsl/ast.h
Commit message (Collapse)AuthorAgeFilesLines
...
* glsl: Refactor handling of ast_array_index to a separate functionIan Romanick2013-04-081-0/+7
| | | | | | | | | I love 800+ line switch-statements as much as the next guy... Future commits will make changes to this part of the AST-to-HIR conversion, and extracting this code will make that a bit easier. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
* glsl: Make check_build_array_max_size externally visibleIan Romanick2013-04-081-0/+4
| | | | | | | A future commit will try to use this function in a different file. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
* glsl: Initialize ast_parameter_declarator member variables.Vinson Lee2013-02-051-4/+8
| | | | | | | Fixes uninitialized pointer field defect reported by Coverity. Signed-off-by: Vinson Lee <vlee@freedesktop.org> Reviewed-by: Brian Paul <brianp@vmware.com>
* glsl: Parse interface array sizeIan Romanick2013-01-251-5/+16
| | | | | | | | | | | | | The size is parsed and stored in the AST, but it is not used yet. Processing of the array size is added in the patch "glsl: Handle instance array declarations" v2: Update the commit message (suggested by Carl Worth). Add a comment to ast_uniform_block::array_size (suggested by Paul Berry). Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Chad Versace <chad.versace@linux.intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
* glsl: Parse non-array uniform block instance names in GLSL ES 3.00.Kenneth Graunke2013-01-251-2/+12
| | | | | | | | | | | | | | | | | | | | | | | In GLSL ES 3.00 (and GLSL 1.50), uniform blocks can have an associated "instance name", which essentially namespaces the variables inside. This patch adds basic parsing for this new feature, but doesn't yet hook it up to actually do anything yet. It does not support for arrays of interface blocks; a later commit will take care of that. This change temporarily regresses the piglit test interface-name-access-without-interface-name.vert. This shader failed to compile before (the expected result), but it failed to compile for the wrong reason. This is not a real regression. v2: Add some comments to ast_uniform_block::instance_name. Suggested by Paul Berry. Reviewed-by: Carl Worth <cworth@cworth.org> Reviewed-by: Chad Versace <chad.versace@linux.intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
* glsl: Add support for default layout qualifiers for uniforms.Eric Anholt2012-07-311-0/+23
| | | | | | | | | | | I ended up having to add rallocing of the ast_type_qualifier in order to avoid pulling in ast.h for glsl_parser_extras.h, because I wanted to track an ast_type_qualifier in the state. Fixes piglit ARB_uniform_buffer_object/row-major. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
* glsl: Turn UBO variable declarations into ir_variables and check qualifiers.Eric Anholt2012-07-201-0/+6
| | | | | | Fixes piglit layout-*-non-uniform and layout-*-within-block. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
* glsl: Add parsing for GLSL uniform blocks.Eric Anholt2012-07-091-0/+28
| | | | | | | | This doesn't do anything with the uniform block declarations yet, so usage of those uniforms finds them to be undeclared. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
* glsl: Don't hide the type of struct_declaration_list.Eric Anholt2012-07-091-1/+5
| | | | | | | | I've been trying to derive from this for UBO support, and the slightly obfuscated types were putting me over the edge. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
* glsl: add support for ARB_blend_func_extended (v3)Dave Airlie2012-04-131-0/+12
| | | | | | | | | | | | | | | | | | | This adds index support to the GLSL compiler. I'm not 100% sure of my approach here, esp without how output ordering happens wrt location, index pairs, in the "mark" function. Since current hw doesn't ever have a location > 0 with an index > 0, we don't have to work out if the output ordering the hw requires is location, index, location, index or location, location, index, index. But we have no hw to know, so punt on it for now. v2: index requires layout - catch and error setup explicit index properly. v3: drop idx_offset stuff, assume index follow location Signed-off-by: Dave Airlie <airlied@redhat.com>
* glsl: Drop the round-trip through ast_type_specifier for many builtin types.Eric Anholt2012-04-091-64/+2
| | | | | | | | | | We have lexer recognition of a bunch of our types based on the handling. This code was mapping those recognized tokens to an enum and then to a string of their name. Just drop the enums and provide the string directly in the parser. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
* glsl: Use (const char *) in AST nodes rather than plain (char *).Kenneth Graunke2012-04-091-8/+8
| | | | | | | | | | | Nothing actually relied on them being mutable, and there was at least one cast which discarded const qualifiers. The next patch would have introduced many more. Casting away const qualifiers should be avoided if at all possible. Signed-off-by: Kenneth Graunke <kenneth@whitecape.org> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
* glsl: Track descriptions of some expressions that can't be l-valuesIan Romanick2012-01-061-0/+13
| | | | | Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Paul Berry <stereotype441@gmail.com>
* glsl: Create AST structs corresponding to new productions in grammarDan McCabe2011-11-071-0/+59
| | | | | | | | | | | Previously we added productions for: switch_body case_label_list case_statement case_statement_list Now add AST structs corresponding to those productions. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
* glsl: Create AST data structures for switch statement and case labelDan McCabe2011-11-071-4/+20
| | | | | | | Data structures for switch statement and case label are created that parallel the structure of other AST data. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
* glsl: add support for GL_OES_EGL_image_externalChia-I Wu2011-11-031-0/+1
| | | | | | | | | | This extension introduces a new sampler type: samplerExternalOES. texture2D (and texture2DProj) can be used to do a texture look up in an external texture. Reviewed-by: Brian Paul <brianp@vmware.com> Acked-by: Jakob Bornecrantz <jakob@vmware.com> Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
* glsl: Silence "ast_to_hir.cpp:1984:25: warning: comparison of unsigned ↵Ian Romanick2011-09-091-1/+1
| | | | | | | | | | | expression >= 0 is always true" ast_type_qualifier::location should have been a signed integer from the beginning, and the giant comment in apply_type_qualifier_to_variable explains why. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=40207 Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
* glsl: Emit function signatures at toplevel, even for built-ins.Paul Berry2011-08-081-2/+1
| | | | | | | | | | | | | | | | | | | | | | | | | | | | | | The ast-to-hir conversion needs to emit function signatures in two circumstances: when a function declaration (or definition) is encountered, and when a built-in function is encountered. To avoid emitting a function signature in an illegal place (such as inside a function), emit_function() checked whether we were inside a function definition, and if so, emitted the signature before the function definition. However, this didn't cover the case of emitting function signatures for built-in functions when those built-in functions are called from inside the constant integer expression that specifies the length of a global array. This failed because when processing an array length, we are emitting IR into a dummy exec_list (see process_array_type() in ast_to_hir.cpp). process_array_type() later checks (via an assertion) that no instructions were emitted to the dummy exec_list, based on the reasonable assumption that we shouldn't need to emit instructions to calculate the value of a constant. This patch changes emit_function() so that it emits function signatures at toplevel in all cases. This partially fixes bug 38625 (https://bugs.freedesktop.org/show_bug.cgi?id=38625). The remainder of the fix is in the patch that follows. Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
* Convert everything from the talloc API to the ralloc API.Kenneth Graunke2011-01-311-5/+5
|
* glsl: Add depth layout qualifiers to ast_type_qualifierChad Versace2011-01-261-0/+8
|
* glsl: Remove unused class ast_declaration_statmentChad Versace2011-01-211-19/+0
|
* glsl: Add support for default precision statementsChad Versace2011-01-171-2/+6
| | | | | | * Add new field ast_type_specifier::is_precision_statement. * Add semantic checks in ast_type_specifier::hir(). * Alter parser rules accordingly.
* glsl: Change default value of ast_type_specifier::precisionChad Versace2011-01-171-3/+4
| | | | | | | | Change default value to ast_precision_none, which denotes the absence of a precision of a qualifier. Previously, the default value was ast_precision_high. This made it impossible to detect if a precision qualifier was present or not.
* glsl: Check that interpolation qualifiers do not precede 'varying'Chad Versace2011-01-171-0/+5
| | | | | | | | | | | | | ... and 'centroid varying'. The check is performed only in GLSL versions >= 1.30. From page 29 (page 35 of the PDF) of the GLSL 1.30 spec: "interpolation qualifiers may only precede the qualifiers in, centroid in, out, or centroid out in a declaration. They do not apply to the deprecated storage qualifiers varying or centroid varying." Fixes Piglit test spec/glsl-1.30/compiler/interpolation-qualifiers/smooth-varying-01.frag.
* glsl: Add method ast_type_qualifier::interpolation_string()Chad Versace2011-01-171-0/+12
| | | | | | If an interpolation qualifier is present, then the method returns that qualifier's string representation. For example, if the noperspective bit is set, then it returns "noperspective".
* glsl: Comment ast_type_qualifier.flagsChad Versace2011-01-041-1/+5
|
* glsl: Factor out code which emits a new function into the IR stream.Kenneth Graunke2010-12-061-0/+4
| | | | A future commit will use the newly created function in a second place.
* glsl: Add parser support for GL_ARB_explicit_attrib_location layoutsIan Romanick2010-10-081-0/+14
| | | | | Only layout(location=#) is supported. Setting the index requires GLSL 1.30 and GL_ARB_blend_func_extended.
* glsl: Wrap ast_type_qualifier contents in a struct in a unionIan Romanick2010-10-081-17/+22
| | | | This will ease adding non-bit fields in the near future.
* glsl: Add doxygen commentsIan Romanick2010-09-201-4/+38
|
* glsl2: Remove unnecessary use of 'struct' before type namesIan Romanick2010-08-131-3/+2
| | | | | | | | In C++ you don't have to say 'struct' or 'class' if the declaration of the type has been seen. Some compilers will complain if you use 'struct' when 'class' should have been used and vice versa. Fixes bugzilla #29539.
* glsl2: Use talloc_zero_size instead of talloc_size to allocate ast_node objects.Carl Worth2010-08-021-1/+1
| | | | | | This is a zero-ing function, (like calloc), to avoid bugs due to accessing uninitialized values. Thanks to valgrind for noticing the use of uninitialized values.
* glsl2: Also initialize the identifier field of parameter_declarator.Eric Anholt2010-08-021-0/+1
| | | | | | The non-named parameter grammar understandably doesn't set the identifier field. Fixes intermittent failures about void main(void) {} having a named void parameter.
* glsl2: initialize is_array and array_size of ast_parameter_declaratorAras Pranckevicius2010-08-021-0/+6
| | | | The non-array path of glsl_parser.ypp wasn't setting is_array to false.
* glsl2: Parser support for GL_ARB_fragment_coord_conventionsIan Romanick2010-07-281-0/+6
|
* glsl2: Add a method for querying if an AST type has any qualifiers.Kenneth Graunke2010-06-291-0/+1
|
* glsl2: Move the compiler to the subdirectory it will live in in Mesa.Eric Anholt2010-06-241-0/+651