aboutsummaryrefslogtreecommitdiffstats
path: root/src/glsl
Commit message (Collapse)AuthorAgeFilesLines
* glsl2: Fix copy propagation in the presence of derefs in array indexes.Eric Anholt2010-07-121-3/+22
| | | | | | We would clear the in_lhs flag early, avoiding copy propagation on the array index variable (oops) and then copy propagating on the array variable (ouch). Just avoid all copy propagation on the LHS instead.
* ir_validate: Also perform usual checks on ir_dereference_variable nodesIan Romanick2010-07-121-0/+2
|
* ir_validate: Validate that varibles are declared before used in IRIan Romanick2010-07-121-2/+26
|
* linker: Stub-out intrastage linkerIan Romanick2010-07-122-14/+89
|
* ir_validate: Additional function related invariant checksIan Romanick2010-07-121-0/+60
| | | | | | | | | Add two invariant checks related to functions and function signatures: 1. Ensure that function definitions (ir_function) are not nested. 2. Ensure that the ir_function pointed to by an ir_function_signature is the one that contains it in its signatures list.
* ir_function_signature: Add method to get the function owning a signatureIan Romanick2010-07-122-5/+22
| | | | | | | | | There is no setter function, the getter returns a constant pointer, and ir_function_signature::_function is private for a reason. The only way to make a connection between a function and function signature is via ir_function::add_signature. This helps ensure that certain invariants (i.e., a function signature is in the list of signatures for its _function) are met.
* glsl2: Add utility function clone_ir_listIan Romanick2010-07-122-0/+69
|
* ir_call: Add method to set the function signature being calledIan Romanick2010-07-122-0/+13
|
* glsl2: Implement ir_function::clone and ir_function_signature::cloneIan Romanick2010-07-121-6/+43
|
* glsl2: Move temp declaration to correct side of if-statement in IRIan Romanick2010-07-121-7/+7
|
* glsl2: Add missing fields in ir_variable::cloneIan Romanick2010-07-121-0/+8
|
* glsl2: Add declarations for temporaries to instruction streamIan Romanick2010-07-121-0/+3
| | | | | | | | Temporary variables added for &&, ||, and ?: were not being added to the instruction stream. This resulted in either test failures or Valgrind being angry after the original IR tree was destroyed by talloc_free. The talloc_free caused the ir_variables to be destroyed even though they were still referenced.
* glsl2: Store the gl_type of the array's element type in the array.Eric Anholt2010-07-121-0/+5
| | | | | Fixes glsl-fs-uniform-array-1, glsl-vs-uniform-array-1, and the -2 tests on software.
* glsl2: Add a new pass at the IR level to break down matrix ops to vector ops.Eric Anholt2010-07-124-0/+196
| | | | | | | This will be used by the Mesa IR and likely most HW backends, as it allows other optimizations to occur that might not otherwise. Fixes glsl-vs-mat-sub-1, glsl-vs-mat-div-1.
* glsl2: Flatten out expressions that are the child of an assignment rhs.Eric Anholt2010-07-121-7/+19
| | | | | | | This feels a little odd, but it will be useful for ir_mat_to_vec, where I want to see a plain assignment of the expression to a variable, not to a writemasked array dereference with a call as the array index.
* glsl2: Check when inlining a bare function call that it actually is.Eric Anholt2010-07-121-0/+6
| | | | | | | It would be easy to miss an entry either of the two visitors involved that would result in trying to ir->remove() the call to remove it from the instruction stream when really it's part of an expression tree that wasn't flattened.
* ast_function: Fix non-float constructors with matrix arguments.Kenneth Graunke2010-07-091-22/+55
| | | | | | | | | | Previously, code like ivec4(mat2(...)) would fail because the compiler would naively try to convert a mat2 to an imat2...which doesn't exist. Now, a separate pass breaks such matrices down to their columns, which can be converted from vec2 to ivec2. Fixes piglit tests constructor-11.vert, constructor-14.vert, constructor-15.vert, and CorrectConstFolding2.frag.
* ast_function: Move error return earlier and don't indent the world.Kenneth Graunke2010-07-091-142/+139
| | | | This has no functional changes.
* ast_function: Remove unnecessary check for empty constructors.Kenneth Graunke2010-07-091-9/+0
| | | | | This case is already caught by a later check that ensures sufficient components were provided, based on the type.
* glsl2: Use new foreach_list_safe abstraction.Kenneth Graunke2010-07-091-7/+3
|
* glsl2: Add foreach_list_safe which works even when mutating the list.Kenneth Graunke2010-07-091-0/+14
| | | | | | | | In particular, with foreach_list_safe, one can remove and free the current node without crashes; if new nodes are added after the current node, they will be properly visited as well. Signed-off-by: Ian Romanick <[email protected]>
* glsl2: Remove generate_temporary and global temporary counter.Kenneth Graunke2010-07-083-31/+5
| | | | | | | Most places in the code simply use a static name, which works because names are never used to look up an ir_variable. generate_temporary is simply unnecessary (and looks like it would leak memory, and isn't thread safe...)
* glsl2: Add support for gl_PointCoord in 1.20.Eric Anholt2010-07-072-0/+11
| | | | Fixes glsl-fs-pointcoord on swrast (remains broken on 965, like master)
* ir_reader: Don't emit ir_function multiple times.Kenneth Graunke2010-07-071-8/+8
|
* linker: Use bit-0 instead of VERT_BIT_GENERIC0Ian Romanick2010-07-071-1/+1
| | | | | | Uses of the bits for allocation are offset by 16, and VERT_BIT_GENERIC0 already has the 16 offset. As a result, it was preventing the wrong thing from being allocated.
* glsl: Fix the setup of refract()'s output for vec3/vec4 and k < 0.0.Eric Anholt2010-07-072-4/+4
| | | | caught by valgrind.
* glsl2: Fix ir_div_to_mul_rcp for integer division.Eric Anholt2010-07-071-9/+47
| | | | | | rcp of an integer value did not produce the result you're looking for. Instead, do the a * rcp(b) as float and truncate after. This mostly fixes glsl-fs-loop-nested.
* glsl2: Actually add the declaration of _post_incdec_temp.Eric Anholt2010-07-071-0/+1
|
* ir_constant_expression: Fix loop increments.Kenneth Graunke2010-07-071-2/+2
|
* glsl2: Initialize yylineno and yycolumn so line numbers are sane.Kenneth Graunke2010-07-072-0/+3
|
* glsl2: Put the initializer in the instruction stream after the declarationIan Romanick2010-07-071-2/+11
|
* exec_list: Add method to append one complete list to anotherIan Romanick2010-07-071-0/+24
|
* Revert "glsl2: Put the declaration in the instruction stream before its ↵Ian Romanick2010-07-071-2/+2
| | | | | | | | | initializer." This change causes segfaults in other tests. A fix for both sets of segfaults is coming. This reverts commit d4d630b72c7b7f38074addda0f1b819608247d93.
* glsl2: Add a pass to simplify if statements returning from both sides.Eric Anholt2010-07-073-0/+125
| | | | | | | | | | | | | | | This allows function inlining making the following tests work even without function calls implemented: glsl-fs-functions-2 glsl-fs-functions-3 glsl-vs-functions glsl-vs-functions-2 glsl-vs-functions-3 glsl-vs-vec4-indexing-5 (Note that those tests were designed to trigger actual function calls, and this defeats them. However, those testcases ended up catching the bug in the previous commit.)
* glsl2: Clean up vec_index_to_cond_assign after the clone return type change.Eric Anholt2010-07-071-2/+2
|
* glsl2: Don't forget to walk the parameters to a function in the hv.Eric Anholt2010-07-071-0/+4
| | | | | Fixes segfaults from use after free after the steal of ir nodes and free of the compile context.
* glsl2: Avoid null deref in scalar constant unop expressions.Eric Anholt2010-07-071-1/+6
|
* glsl2: Put the declaration in the instruction stream before its initializer.Eric Anholt2010-07-061-2/+2
| | | | | This fixes a regression in the generated code from when I did the ir_validate.cpp-driven rework of assignments.
* glsl2: Add pass for supporting variable vector indexing in rvalues.Eric Anholt2010-07-064-0/+200
| | | | | | | The Mesa IR needs this to support vector indexing correctly, and hardware backends such as 915 would want this behavior as well. Fixes glsl-vs-vec4-indexing-2.
* glsl2: Clone methods return the type of the thing being clonedIan Romanick2010-07-065-41/+45
| | | | This is as opposed to returning the type of the base class of the hierarchy.
* ir_constant_expression: Declare loop counting variables in the loops.Kenneth Graunke2010-07-061-24/+23
| | | | Fixes "name lookup of 'c' changed" warning.
* glsl2: Update TODO.Kenneth Graunke2010-07-061-11/+3
|
* ir_constant_expression: Add support for dot products.Kenneth Graunke2010-07-061-0/+20
|
* ir_constant_expression: Add support for matrix multiplication.Kenneth Graunke2010-07-061-3/+25
| | | | | | | Also handles matrix/vector and vector/matrix multiplication. Fixes piglit tests const-matrix-multiply-01.frag, const-matrix-multiply-02.frag, and const-vec-mat.frag.
* ir_constant_expression: Support scalar * vector and scalar * matrix.Kenneth Graunke2010-07-061-7/+10
| | | | | | | The test here is slightly different since we need to keep matrix multiplication separate. Fixes piglit tests const-vec-scalar-03.frag and const-mat-scalar-03.frag.
* ir_constant_expression: Support scalar / vector and scalar / matrix.Kenneth Graunke2010-07-061-18/+18
| | | | Fixes piglit tests const-vec-scalar-04.frag and const-mat-scalar-04.frag.
* ir_constant_expression: Support scalar - vector and scalar - matrix.Kenneth Graunke2010-07-061-18/+18
| | | | Fixes piglit tests const-vec-scalar-02.frag and const-mat-scalar-02.frag.
* ir_constant_expression: Support scalar + vector and scalar + matrix.Kenneth Graunke2010-07-061-18/+28
| | | | | Fixes piglit tests const-vec-scalar-01.frag, const-vec-scalar-05.frag, and const-mat-scalar-01.frag.
* ir_constant_expression: Assert that both operands share a base type.Kenneth Graunke2010-07-061-0/+3
|
* ir_constant_expression: Initialize op[0] and op[1] to NULL.Kenneth Graunke2010-07-061-1/+1
| | | | This makes it easy to check if there is a second argument.