summaryrefslogtreecommitdiff
path: root/src/glsl/ast_to_hir.cpp
AgeCommit message (Collapse)Author
2010-12-08glsl: In ast_to_hir, check sampler array indexingChad Versace
Raise error if a sampler array is indexed with a non-constant expression. From section 4.1.7 of the GLSL 1.30 spec: "Samplers aggregated into arrays within a shader (using square brackets [ ]) can only be indexed with integral constant expressions [...]."
2010-12-07glsl: Inherrit type of declared variable from initializerIan Romanick
Types of declared variables and their initializer must match excatly except for unsized arrays. Previously the type inherritance for unsized arrays happened implicitly in the emitted assignment. However, this assignment is never emitted for uniforms. Now that type is explicitly copied unconditionally. Fixes piglit test array-compare-04.vert (bugzilla #32035) and glsl-array-uniform-length (bugzilla #31985). NOTE: This is a candidate for the 7.9 branch.
2010-12-07glsl: Ensure that equality comparisons don't return a NULL IR treeIan Romanick
This fixes bugzilla #32035 and piglit test case array-compare-01 and array-compare-02. NOTE: This is a candidate for the 7.9 branch.
2010-12-06glsl: Factor out code which emits a new function into the IR stream.Kenneth Graunke
A future commit will use the newly created function in a second place.
2010-12-01glsl: Mark the array access for whole-array comparisons.Eric Anholt
By not doing so, the uniform contents of glsl-uniform-non-uniform-array-compare.shader_test was getting thrown out since nobody was recorded as dereferencing the array.
2010-11-30glsl: Quiet unreachable no-return-from-function warning.Eric Anholt
2010-11-30glsl: Fix structure and array comparisions.Eric Anholt
We were trying to emit a single ir_expression to compare the whole thing. The backends (ir_to_mesa.cpp and brw_fs.cpp so far) expected ir_binop_any_nequal or ir_binop_all_equal to apply to at most a vector (with matrices broken down by the lowering pass). Break them down to a bunch of ORed or ANDed any_nequals/all_equals. Fixes: glsl-array-compare glsl-array-compare-02 glsl-fs-struct-equal glsl-fs-struct-notequal Bug #31909
2010-11-29glsl: Make the symbol table's add_variable just use the variable's name.Eric Anholt
2010-11-29glsl: Make the symbol table's add_function just use the function's name.Eric Anholt
2010-11-17glsl: Fix erroneous cast in ast_jump_statement::hir()Chad Versace
Return values were erroneously cast from (ir_rvalue*) to (ir_expression*). NOTE: This is a candidate for the 7.9 branch.
2010-10-25glsl: Fix ast-to-hir for ARB_fragment_coord_conventionsChad Versace
Function ast_declarator_list::hir(), when processing keywords added by extension ARB_fragment_coord_conventions, made the mistake of checking only if the extension was __supported by the driver__. The correct behavior is to check if the extensi0n is __enabled in the parse state__. NOTE: this is a candidate for the 7.9 branch. Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
2010-10-20glsl: Remove useless ir_shader enumeration value.Kenneth Graunke
2010-10-20glsl: Add assert for unhandled ir_shader case.Vinson Lee
Silences this GCC warning. ast_to_hir.cpp: In function 'void apply_type_qualifier_to_variable(const ast_type_qualifier*, ir_variable*, _mesa_glsl_parse_state*, YYLTYPE*)' ast_to_hir.cpp:1768: warning: enumeration value 'ir_shader' not handled in switch
2010-10-19glsl: Implement ast-to-hir for bit-logic opsChad Versace
Implement by adding to ast_expression::hir() the following cases: - ast_and_assign - ast_or_assign - ast_xor_assign
2010-10-19glsl: Define bit_logic_result_type() in ast_to_hir.cppChad Versace
This function type checks the operands of and returns the result type of bit-logic operations. It replaces the type checking performed in the following cases of ast_expression::hir() : - ast_bit_and - ast_bit_or - ast_bit_xor
2010-10-19glsl: Implement ast-to-hir for bit-shift-assignmentChad Versace
Implement by adding to ast_expression::hir() these cases: - ast_ls_assign - ast_rs_assign
2010-10-19glsl: Define shift_result_type() in ast_to_hir.cppChad Versace
This function type checks the operands of and returns the result type of bit-shift operations. It replaces the type checking performed in the following cases of ast_expression::hir() : - ast_lshift - ast_rshift
2010-10-18glsl: Don't return NULL IR for erroneous bit-shift operators.Kenneth Graunke
Existing code relies on IR being generated (possibly with error type) rather than returning NULL. So, don't break - go ahead and generate the operation. As long as an error is flagged, things will work out. Fixes fd.o bug #30914.
2010-10-15glsl: Implement ast-to-hir for binary shifts in GLSL 1.30Chad Versace
Implement by adding the following cases to ast_expression::hir(): - ast_lshift - ast_rshift Also, implement ir validation for the new operators by adding the following cases to ir_validate::visit_leave(): - ir_binop_lshift - ir_binop_rshift
2010-10-08glsl: Add linker support for explicit attribute locationsIan Romanick
2010-10-08glsl: Track explicit location in AST to IR translationIan Romanick
2010-10-08glsl: Wrap ast_type_qualifier contents in a struct in a unionIan Romanick
This will ease adding non-bit fields in the near future.
2010-09-18glsl: Properly handle nested structure types.Kenneth Graunke
Fixes piglit test CorrectFull.frag.
2010-09-16glsl: Change from has_builtin_signature to has_user_signature.Kenneth Graunke
The print visitor needs this, and the only existing user can work with has_user_signature just as well.
2010-09-13glsl: introduce ir_binop_all_equal and ir_binop_any_equal, allow vector cmpsLuca Barbieri
Currently GLSL IR forbids any vector comparisons, and defines "ir_binop_equal" and "ir_binop_nequal" to compare all elements and give a single bool. This is highly unintuitive and prevents generation of optimal Mesa IR. Hence, first rename "ir_binop_equal" to "ir_binop_all_equal" and "ir_binop_nequal" to "ir_binop_any_nequal". Second, readd "ir_binop_equal" and "ir_binop_nequal" with the same semantics as less, lequal, etc. Third, allow all comparisons to acts on vectors. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
2010-09-07ast_to_hir: Mark arrays as lvalues in GLSL ES, but prohibit assignment.Kenneth Graunke
This allows them to be passed as out/inout parameters, but still prevents them from being used as the target of an assignment. This is per section 5.8 of the GLSL ES 1.00 specification.
2010-09-07glsl: Allow overloading of built-ins without hiding in GLSL ES.Kenneth Graunke
The rules are explicitly different from desktop GLSL.
2010-09-07glsl: Move is_builtin flag back to ir_function_signature.Kenneth Graunke
This effectively reverts b6f15869b324ae64a00d0fe46fa3c8c62c1edb6c. In desktop GLSL, defining a function with the same name as a built-in hides that built-in function completely, so there would never be built-in and user function signatures in the same ir_function. However, in GLSL ES, overloading built-ins is allowed, and does not hide the built-in signatures - so we're back to needing this.
2010-09-07ast_to_hir: Reject embedded structure definitions in GLSL ES 1.00.Kenneth Graunke
2010-09-07ast_to_hir: Reject unsized array declarations in GLSL ES 1.00.Kenneth Graunke
2010-09-07glsl: Set default language version in mesa_glsl_parse_state constructor.Kenneth Graunke
This should make it easier to change the default version based on the API (say, version 1.00 for OpenGL ES). Also, synchronize the symbol table's version with the parse state's version just before doing AST-to-HIR. This way, it will be set when it matters, but the main initialization code doesn't have to care about the symbol table.
2010-09-07glsl2: Forbid array-types in ?: operator in GLSL 1.10Ian Romanick
Fixes bugzilla #30039.
2010-09-01glsl: Apply implicit conversions to structure constructor parameters.Kenneth Graunke
The code for handling implicit conversions should probably get refactored, but for now, this is easy. Fixes piglit test constructor-26.vert.
2010-09-01glsl2: Remove unnecessary glsl_symbol_table::get_function parameter ↵Ian Romanick
return_constructors Now that constructors are not generated as functions or stored in the symbol table, there is no need to flag whether or not constructors should be returned.
2010-09-01glsl2: Don't generate constructor functions for structuresIan Romanick
2010-09-01glsl2: Disallow function declarations within function definitions in GLSL 1.20Ian Romanick
The GLSL 1.20 spec specifically disallows this, but it was allowed in GLSL 1.10. Fixes piglit test cases local-function-0[13].frag and bugzilla #29921.
2010-08-31ast_to_hir: Add support for bit-wise operators (but not shifts).Kenneth Graunke
Previously, using bit-wise operators in some larger expression would crash on a NULL pointer dereference. This code at least doesn't crash. Fixes piglit test bitwise-01.frag.
2010-08-26glsl2: Remove a couple FINISHME comments that have already been resolvedIan Romanick
2010-08-26glsl: Move built-ins to live beyond the global scope.Kenneth Graunke
Per the GLSL 1.20 specification (presumably a clarification of 1.10). Also, when creating user functions, make a new ir_function that shadows the built-in ir_function, rather than adding new signatures. User functions are supposed to hide built-ins, not overload them. Fixes piglit tests redeclaration-{04, 12, 14}.vert.
2010-08-26glsl: Refactor variable declaration handling.Kenneth Graunke
Moving the check for an earlier variable declaration helps cleanly separate out the re-declaration vs. new declaration code a bit. With that in place, conflicts between variable names and structure types or function names aren't caught by the earlier "redeclaration" error message, so check the return type on glsl_symbol_table::add_variable and issue an error there. If one occurs, don't emit the initializer. Fixes redeclaration-01.vert and redeclaration-09.vert. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
2010-08-26glsl: Don't add overloads to existing structure constructors.Kenneth Graunke
Instead, make a new ir_function and try to add it to the symbol table. Fixes piglit test redeclaration-08.vert.
2010-08-26glsl: Remove name_declared_this_scope check when adding functions.Kenneth Graunke
Instead, rely on the symbol table's rules. Fixes redeclaration-02.vert.
2010-08-26glsl: Use a single shared namespace in the symbol table.Kenneth Graunke
As of 1.20, variable names, function names, and structure type names all share a single namespace, and should conflict with one another in the same scope, or hide each other in nested scopes. However, in 1.10, variables and functions can share the same name in the same scope. Structure types, however, conflict with/hide both. Fixes piglit tests redeclaration-06.vert, redeclaration-11.vert, redeclaration-19.vert, and struct-05.vert.
2010-08-25glsl: fix crash with variable indexing into array in a structAras Pranckevicius
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
2010-08-24glsl: Include main/core.h.Chia-I Wu
Make glsl include only main/core.h from core mesa.
2010-08-23glsl: When unable to assign the initializer for a const variable, set it to 0.Eric Anholt
This prevents assertion failures or cascading errors after we've logged the fact that we were unable to handle the initializer. Fixes unsized-array-non-const-index-2.vert
2010-08-23glsl: Cleanly fail when a function has an unknown return type.Eric Anholt
Bug #29608.
2010-08-23glsl: Trim the size of uniform arrays to the maximum element used.Eric Anholt
Fixes glsl-getactiveuniform-array-size.
2010-08-21glsl: Silence unused variable warning.Vinson Lee
The variable is actually used but only in the body of an assert.
2010-08-21glsl: Handle array declarations in function parameters.Kenneth Graunke
The 'vec4[12] foo' style already worked, but the 'vec4 foo[12]' style did not. Also, 'vec4[] foo' was wrongly accepted. Fixes piglit test cases array-19.vert and array-21.vert. May fix fd.o bug #29684 (or at least part of it).