Commit Graph

36327 Commits

Author SHA1 Message Date
Eric Anholt 2927c81ed1 glsl2: Don't mark a variable as constant if it was used as an out param. 2010-07-20 15:59:04 -07:00
Eric Anholt 02d3711a21 glsl2: Always insert function calls into the instruction stream.
If they have a return value, this means putting it into a temporary
and making a deref of the temp be the rvalue, since we don't know if
the rvalue will be used or not.
2010-07-20 15:59:04 -07:00
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