Eric Anholt
f8946699ec
glsl2: Add definitions of the builtin constants present in GLSL 1.10.
...
Fixes:
glsl1-built-in constants
2010-07-20 14:03:35 -07:00
Eric Anholt
1245babe0c
glsl2: Fix asin() implementation.
...
I'd flipped around the order of two operations in paren-balancing
adventures, and left out the multiply by sign(x) required for negative x.
Fixes:
glsl1-acos(vec4) function
glsl1-asin(vec4) function
glsl1-atan(vec4) function
2010-07-20 12:24:01 -07:00
Eric Anholt
117d154b4d
glsl2: notEqual() produces a boolean value, not the base type of the args.
...
Fixes:
glsl1-vector relational (bvec2 ==,!=)
glsl1-vector relational (vec4 !=)
2010-07-20 12:01:40 -07:00
Eric Anholt
14f8e16132
glsl2: Constant-fold assignment conditions.
2010-07-20 12:01:40 -07:00
Ian Romanick
5a2e0b8ce5
glsl2: Don't validate IR if there were compilation errors
2010-07-20 11:38:54 -07:00
Eric Anholt
18ab797d3a
ir_to_mesa: Fix swizzled writemasks with swapped component ordering.
...
I hadn't noticed you could do this, but glsl1 tests caught it. Fixes:
glsl1-Swizzled writemask
glsl1-Swizzled writemask (2)
glsl1-Swizzled writemask (rgba)
glsl1-Swizzled writemask (stpq)
2010-07-20 11:28:33 -07:00
Ian Romanick
cd6764ed6e
linker: Remove the FINISHME comment for intrastage linking
2010-07-19 14:50:43 -07:00
Ian Romanick
1a03a644d2
linker: Remove redundant check for 'main' in shaders
...
This is now handled in link_intrastage_shaders.
2010-07-19 14:50:43 -07:00
Ian Romanick
25f51d3b9b
linker: Track and validate GLSL versions used in shaders
2010-07-19 14:50:43 -07:00
Ian Romanick
b64e979971
glsl2: Use Elements macro
2010-07-19 14:50:43 -07:00
Ian Romanick
fc9ae101b4
linker: Recursively resolve function calls in imported functions
2010-07-19 14:50:43 -07:00
Ian Romanick
532c2d3085
linker: look up function signatures during linking instead of using callee
...
Instead of using ir_call::callee, search for the signature in the
linked shader. This will allow resolving calls from functions
imported from other shaders. The ir_call::callee pointer in the
imported function will still reference a signature in the original shader.
2010-07-19 14:50:43 -07:00
Ian Romanick
5adbf0bff1
linker: Pull find_matching_signature out of call_link_visitor
...
The list of shaders to search needs to be provided as an explicit
parameter to support coming changes. At that point there is no reason
for it to be in the class. Also, fix some of the 'const' decorators.
2010-07-19 14:50:43 -07:00
Ian Romanick
b95897b89d
glsl2: Explicitly walk lists in ir_function::parameter_lists_match
...
Give ir_function::parameter_lists_match_exist similar treatment. Make
the parameters const, and propogate the constness as far as it will
trivially go.
2010-07-19 14:50:43 -07:00
Ian Romanick
de415b7f4b
linker: Add comment about bug in initializer handling
2010-07-19 14:50:43 -07:00
Ian Romanick
8fe8a814b0
linker: First bits of intrastage, intershader function linking
...
This handles the easy case of linking a function in a different
compilation unit that doesn't call any functions or reference any
global variables.
2010-07-19 14:50:43 -07:00
Ian Romanick
a48a2b66e8
ir_function_signature: Make actual_parameters public
2010-07-19 14:50:43 -07:00
Ian Romanick
3880d07f4b
linker: Remove some unnecessary includes
2010-07-19 14:50:43 -07:00
Kenneth Graunke
61a44ccaef
exec_list: Fix foreach_list_safe.
...
It now works correctly when nodes are removed, as it was originally
intended to do; it no longer processes nodes added to the list before
the current node, nor those added immediately after the current node.
This matches the behavior of Linux's list_for_each_safe.
2010-07-19 14:49:34 -07:00
Ian Romanick
303c99f12f
linker: Use foreach_list_safe in move_non_declarations
...
The node being processed may be removed from the list and put in a
different list. Not using the safe version caused list processing to
change streams after moving a node.
2010-07-19 12:36:32 -07:00
Ian Romanick
9303e358cb
linker: Move global instructions from the linked shader first
...
For the shader containing 'main', use the linked shader (i.e., the
clone of the original shader that contained main) as the source for
global instructions to move into main.
2010-07-19 12:36:32 -07:00
Eric Anholt
5304493c40
glsl2: Fix lexing of octal values, including "0".
...
When faced with a constructor like 'ivec4(0, 2, 0, 0)', we would
manage to get a value of 2 instead of 0 for the first "0". Usually 2
characters past "0" would point at some junk and lex as 0 anyway.
Fixes glsl-octal and glsl-unused-varyings.
2010-07-19 11:58:03 -07:00
Eric Anholt
82d4b9593b
glsl2: Fix the expression type for atan's pi * sign(y).
...
Fixes CorrectFunction.vert.
2010-07-19 10:47:12 -07:00
Eric Anholt
95c08920ea
i915: Ask the compiler to flatten out all the if statements that it can.
2010-07-19 10:47:08 -07:00
Eric Anholt
29ce44ad2b
glsl2: Add a pass for converting if statements to conditional assignment.
...
This will be used on 915 and similar hardware of that generation.
2010-07-19 10:21:38 -07:00
Eric Anholt
d16044ad4d
glsl2: Give IR nodes a type field.
...
This is a big deal for debugging if nothing else ("what class is this
ir_instruction, really?"), but is also nice for avoiding building a
whole visitor or an if (node->as_whatever() || node->as_other_thing())
chain.
2010-07-19 09:50:29 -07:00
Eric Anholt
ee7b2b3f44
ir_to_mesa: Do validation on the IR tree.
2010-07-19 09:50:26 -07:00
Eric Anholt
4802fd905a
ir_to_mesa: Don't do lowering passes on an errored-out shader.
2010-07-19 09:44:30 -07:00
Eric Anholt
b29d31cd67
ir_to_mesa: Rename struct temp_entry, which is used for all variables now.
2010-07-18 18:13:07 -07:00
Eric Anholt
7b13014942
ir_to_mesa: Add support for function calls.
...
Unlike the previous compiler, in this case we emit only one copy of
the function regardless of how many times it's called.
2010-07-18 18:13:06 -07:00
Eric Anholt
1f47245bdd
glsl2: Remove the const disease from function signature's callee.
2010-07-18 18:13:06 -07:00
Eric Anholt
9be7f63813
glsl2: Make cross() be an expression operation.
...
ARB_fp, ARB_vp, Mesa IR, and the 965 vertex shader all have
instructions for cross. Shaves 12 Mesa instructions off of a
66-instruction shader I have.
2010-07-18 18:12:12 -07:00
Eric Anholt
87a2ee8db6
glsl2: Fix warning from always-false assert not being known to not return.
2010-07-18 17:49:15 -07:00
Kenneth Graunke
17a307d154
ast_function: Actually do type conversion on function arguments.
2010-07-14 16:49:24 -07:00
Kenneth Graunke
1fdcdb2dca
exec_list: Add a new replace_with method.
2010-07-14 16:49:24 -07:00
Kenneth Graunke
53120805a8
Refresh autogenerated file builtin_function.cpp.
2010-07-14 16:49:24 -07:00
Kenneth Graunke
d5316aeb38
glsl2/builtins: Rework clamp to use scalar/vector combinations.
2010-07-14 16:49:24 -07:00
Kenneth Graunke
8984203abb
glsl2/builtins: Rework min/max to use scalar/vector combinations.
2010-07-14 16:49:24 -07:00
Kenneth Graunke
ce5ae5f49d
ir_constant_expression: Add support for ir_binop_mod.
2010-07-14 16:49:24 -07:00
Kenneth Graunke
79fed377f4
ir_constant_expression: Add support for ir_binop_min and ir_binop_max.
...
These now work on scalar/vector combos. Semantically, if a is a scalar,
min(a, vec2(x,y)) == vec2(min(a,x), min(a,y))
2010-07-14 15:50:28 -07:00
Kenneth Graunke
891a0647e4
ir_constant_expression: Add support for ir_binop_pow.
2010-07-14 15:50:28 -07:00
Kenneth Graunke
3fab376bef
ir_constant_expression: Add support for ir_unop_cos.
2010-07-14 15:50:28 -07:00
Kenneth Graunke
908afd16d1
ir_constant_expression: Add support for ir_unop_sin.
2010-07-14 15:50:28 -07:00
Kenneth Graunke
074720477c
ir_constant_expression: Add support for ir_unop_floor.
2010-07-14 15:50:28 -07:00
Kenneth Graunke
c1ee30a145
ir_constant_expression: Add support for ir_unop_ceil.
2010-07-14 15:50:28 -07:00
Kenneth Graunke
323d909ab2
ir_constant_expression: Add support for ir_unop_trunc.
...
This uses a C99 function.
2010-07-14 15:50:28 -07:00
Kenneth Graunke
cb63929df4
ir_constant_expression: Add support for ir_unop_log2.
...
This uses a C99 function.
2010-07-14 15:50:27 -07:00
Kenneth Graunke
aca01edc83
ir_constant_expression: Add support for ir_unop_exp2.
...
This uses a C99 function.
2010-07-14 15:50:27 -07:00
Kenneth Graunke
14b7b2660c
ir_constant_expression: Add support for ir_unop_sign.
2010-07-14 15:50:27 -07:00
Kenneth Graunke
5e840dba44
ir_constant_expression: Remove bogus assert in ir_unop_abs case.
...
abs is defined for integral types; it's even implemented.
2010-07-14 15:50:27 -07:00