Commit graph

36241 commits

Author SHA1 Message Date
Eric Anholt
6d8a0a0aad glsl2: Add a new pass at the IR level to break down matrix ops to vector ops.
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.
2010-07-12 13:26:46 -07:00
Eric Anholt
5723e5bb8b glsl2: Flatten out expressions that are the child of an assignment rhs.
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.
2010-07-12 12:02:32 -07:00
Eric Anholt
d2afc87445 glsl2: Check when inlining a bare function call that it actually is.
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.
2010-07-12 12:02:11 -07:00
Kenneth Graunke
284d821206 ast_function: Fix non-float constructors with matrix arguments.
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.
2010-07-09 09:46:29 -07:00
Kenneth Graunke
f58bbd134e ast_function: Move error return earlier and don't indent the world.
This has no functional changes.
2010-07-09 09:46:29 -07:00
Kenneth Graunke
59df3385e1 ast_function: Remove unnecessary check for empty constructors.
This case is already caught by a later check that ensures sufficient
components were provided, based on the type.
2010-07-09 09:46:29 -07:00
Kenneth Graunke
a4dde28ee6 glsl2: Use new foreach_list_safe abstraction. 2010-07-09 09:46:29 -07:00
Kenneth Graunke
f3290e950c glsl2: Add foreach_list_safe which works even when mutating the list.
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 <ian.d.romanick@intel.com>
2010-07-09 09:46:07 -07:00
Kenneth Graunke
dfd30ca6a9 glsl2: Remove generate_temporary and global temporary counter.
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...)
2010-07-08 15:44:19 -07:00
Eric Anholt
25cda5039d mesa: Extend register lifetimes to the end of the largest loop required.
Previously, a register defined at main scope and used in a loop in a
loop could end up getting marked as needed only from the definition
outside of the loops to the end of the inner loop, and we would
cleverly slot in something else in its register in the end of the
outer loop.

Fixes glsl-vs-loop-nested and glsl-fs-loop-nested on glsl2.  This
doesn't happen much on master because the original compiler does its
own register allocation, so we find little we can do with linear scan
register (re)allocation.
2010-07-07 21:33:38 -07:00
Eric Anholt
f632a330ec mesa: Fix documentation of BranchTarget for BRK.
It was changed in 2009 and the comment wasn't updated.
2010-07-07 21:00:32 -07:00
Eric Anholt
152b55e74d glsl2: Add support for gl_PointCoord in 1.20.
Fixes glsl-fs-pointcoord on swrast (remains broken on 965, like master)
2010-07-07 19:45:22 -07:00
Eric Anholt
ea2a03f0a5 ir_to_mesa: Fix the assertion on LHS array derefs to DWIM.
This allows array derefs of matrices now, which makes idr's GLSL demo
happy.
2010-07-07 17:59:50 -07:00
Eric Anholt
ffd24b0a68 ir_to_mesa: Add support for constant matrices (untested). 2010-07-07 17:49:05 -07:00
Eric Anholt
b4d0c0e0ee ir_to_mesa: Add support for adding/subtracting matrices.
This isn't really tested, but didn't break normal vector add/sub.
2010-07-07 17:27:06 -07:00
Eric Anholt
69676fc6a3 ir_to_mesa: Don't assert that we can't assign matrices. It should work now. 2010-07-07 17:27:04 -07:00
Eric Anholt
9968f1b23c ir_to_mesa: Only allocate a vector per column of a matrix. 2010-07-07 16:37:48 -07:00
Eric Anholt
7d8091f7cc ir_to_mesa: Add support for assignment of aggregates. 2010-07-07 16:37:48 -07:00
Eric Anholt
9b68b88e43 ir_to_mesa: Add support for matrix * matrix. 2010-07-07 16:37:48 -07:00
Kenneth Graunke
e024c5c690 ir_reader: Don't emit ir_function multiple times. 2010-07-07 16:37:48 -07:00
Ian Romanick
35c89204e5 linker: Use bit-0 instead of VERT_BIT_GENERIC0
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.
2010-07-07 16:28:39 -07:00
Eric Anholt
0b74bbb3dc glsl: Fix the setup of refract()'s output for vec3/vec4 and k < 0.0.
caught by valgrind.
2010-07-07 14:55:33 -07:00
Eric Anholt
9cbd8a1d5a glsl2: Fix ir_div_to_mul_rcp for integer division.
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.
2010-07-07 14:06:26 -07:00
Eric Anholt
43b5b03d67 glsl2: Actually add the declaration of _post_incdec_temp. 2010-07-07 14:06:26 -07:00
Kenneth Graunke
acf88f2769 ir_constant_expression: Fix loop increments. 2010-07-07 12:41:26 -07:00
Kenneth Graunke
388ab9fa6b glsl2: Initialize yylineno and yycolumn so line numbers are sane. 2010-07-07 12:41:26 -07:00
Ian Romanick
e78e0fa42b glsl2: Put the initializer in the instruction stream after the declaration 2010-07-07 12:41:26 -07:00
Ian Romanick
c44556317a exec_list: Add method to append one complete list to another 2010-07-07 12:41:26 -07:00
Ian Romanick
2e85f993d8 Revert "glsl2: Put the declaration in the instruction stream before its initializer."
This change causes segfaults in other tests.  A fix for both sets of
segfaults is coming.

This reverts commit d4d630b72c.
2010-07-07 12:41:26 -07:00
Eric Anholt
76101f7c04 ir_to_mesa: Add support for gl_TextureMatrix access.
Fixes glsl-vs-texturematrix-1, and glsl-vs-texturematrix-2 on swrast.
2010-07-07 11:51:36 -07:00
Eric Anholt
8bb15c1ed5 ir_to_mesa: Fill in some uninitialized fields that sometimes contained junk. 2010-07-07 11:39:21 -07:00
Eric Anholt
d674ebcee0 glsl2: Add a pass to simplify if statements returning from both sides.
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.)
2010-07-07 09:10:48 -07:00
Eric Anholt
6de882334a glsl2: Clean up vec_index_to_cond_assign after the clone return type change. 2010-07-07 09:07:52 -07:00
Eric Anholt
773025b92c glsl2: Don't forget to walk the parameters to a function in the hv.
Fixes segfaults from use after free after the steal of ir nodes and
free of the compile context.
2010-07-07 09:07:52 -07:00
Eric Anholt
570dc0d400 glsl2: Avoid null deref in scalar constant unop expressions. 2010-07-07 09:07:52 -07:00
Eric Anholt
d4d630b72c glsl2: Put the declaration in the instruction stream before its initializer.
This fixes a regression in the generated code from when I did the
ir_validate.cpp-driven rework of assignments.
2010-07-06 18:49:24 -07:00
Eric Anholt
a36334be02 glsl2: Add pass for supporting variable vector indexing in rvalues.
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.
2010-07-06 18:49:24 -07:00
Eric Anholt
2d1789e667 ir_to_mesa: Add support for conditional moves.
Nothing generates conditional moves yet.
2010-07-06 18:49:24 -07:00
Ian Romanick
ca088cc277 glsl2: Clone methods return the type of the thing being cloned
This is as opposed to returning the type of the base class of the hierarchy.
2010-07-06 17:44:37 -07:00
Kenneth Graunke
f14e596f11 ir_constant_expression: Declare loop counting variables in the loops.
Fixes "name lookup of 'c' changed" warning.
2010-07-06 17:43:56 -07:00
Kenneth Graunke
f2dfac6d74 glsl2: Update TODO. 2010-07-06 16:03:33 -07:00
Kenneth Graunke
3f4a0b8bb0 ir_constant_expression: Add support for dot products. 2010-07-06 16:03:33 -07:00
Kenneth Graunke
cf80a4d177 ir_constant_expression: Add support for matrix multiplication.
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.
2010-07-06 16:03:33 -07:00
Kenneth Graunke
37b3f9d0ed ir_constant_expression: Support scalar * vector and scalar * matrix.
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.
2010-07-06 16:03:33 -07:00
Kenneth Graunke
dad35eb8b0 ir_constant_expression: Support scalar / vector and scalar / matrix.
Fixes piglit tests const-vec-scalar-04.frag and const-mat-scalar-04.frag.
2010-07-06 16:03:33 -07:00
Kenneth Graunke
97b44f040a ir_constant_expression: Support scalar - vector and scalar - matrix.
Fixes piglit tests const-vec-scalar-02.frag and const-mat-scalar-02.frag.
2010-07-06 16:03:33 -07:00
Kenneth Graunke
e74dcd7924 ir_constant_expression: Support scalar + vector and scalar + matrix.
Fixes piglit tests const-vec-scalar-01.frag, const-vec-scalar-05.frag,
and const-mat-scalar-01.frag.
2010-07-06 16:03:33 -07:00
Kenneth Graunke
6fc983b9bb ir_constant_expression: Assert that both operands share a base type. 2010-07-06 16:03:33 -07:00
Kenneth Graunke
6bc432e14e ir_constant_expression: Initialize op[0] and op[1] to NULL.
This makes it easy to check if there is a second argument.
2010-07-06 16:03:33 -07:00
Kenneth Graunke
c63a1db81f ir_constant_expression: Initialize all components of constant data to 0.
This is probably just a good idea, and will come in useful when
implementing things like matrix multiplication.
2010-07-06 16:03:32 -07:00