summaryrefslogtreecommitdiff
path: root/src/glsl/ir.h
AgeCommit message (Collapse)Author
2010-07-22glsl2: Initialize ir_instruction::type and ir_rvalue::type.Kenneth Graunke
Top-level instructions now get NULL as their default type (since type is irrelevant for things like ir_function), while ir_rvalues get error_type by default. This should make it easier to tell if we've forgotten to set a type. It also fixes some "Conditional jump or move depends on uninitialized value" errors in valgrind caused by ir_validate examining the type of top level ir_instructions, which weren't set.
2010-07-22glsl2: Make ir_assignment derive from ir_instruction, not ir_rvalue.Kenneth Graunke
Assignments can only exist at the top level instruction stream; the residual value is handled by assigning the value to a temporary and returning an ir_dereference_variable of that temporary.
2010-07-21glsl2: Extend ir_constant to store constant arrays, and generate them.Kenneth Graunke
Since GLSL permits arrays of structures, we need to store each element as an ir_constant*, not just ir_constant_data. Fixes parser tests const-array-01.frag, const-array-03.frag, const-array-04.frag, const-array-05.frag, though 03 and 04 generate the wrong code.
2010-07-21linker: Link built-in functions instead of including them in every shaderIan Romanick
This is an invasive set of changes. Each user shader tracks a set of other shaders that contain built-in functions. During compilation, function prototypes are imported from these shaders. During linking, the shaders are linked with these built-in-function shaders just like with any other shader.
2010-07-21glsl2: Add function to import function prototypes from one IR tree to anotherIan Romanick
2010-07-20glsl2: Implement utility routine to talloc reparent an IR treeIan Romanick
2010-07-20glsl2: Add and use new variable mode ir_var_temporaryIan Romanick
This is quite a large patch because breaking it into smaller pieces would result in the tree being intermitently broken. The big changes are: * Add the ir_var_temporary variable mode * Change the ir_variable constructor to take the mode as a parameter and correctly specify the mode for all ir_varables. * Change the linker to not cross validate ir_var_temporary variables. * Change the linker to pull all ir_var_temporary variables from global scope into 'main'.
2010-07-20ir_constant_expression: Convert from a visitor to a virtual function.Kenneth Graunke
The constant_expression_wrapper was already the only external API, and much of the internal code used it anyway. Also, it wouldn't ever visit non-rvalue ir_instructions, so using a visitor seemed a bit unnecessary. This uses "ir_foo *ir = this;" lines to avoid code churn. These should be removed.
2010-07-20glsl2: Move constant_expression_value method to ir_rvalue.Kenneth Graunke
This prevents top-level callers from asking for the value of something that is guaranteed not to have one.
2010-07-19glsl2: Explicitly walk lists in ir_function::parameter_lists_matchIan Romanick
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-19ir_function_signature: Make actual_parameters publicIan Romanick
2010-07-19glsl2: Give IR nodes a type field.Eric Anholt
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-18glsl2: Remove the const disease from function signature's callee.Eric Anholt
2010-07-18glsl2: Make cross() be an expression operation.Eric Anholt
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-14glsl2: Remove ir_program bong hits.Kenneth Graunke
2010-07-12ir_function: Make matching_signature not return constIan Romanick
The linker needs to use this function to get specific function signatures, but it also needs to modify the returned signature. Since this method isn't itself const (i.e., const this pointer), there is no value in making a const and non-const version.
2010-07-12linker: Implement first bits of intrastage linkingIan Romanick
This currently involves an ugly hack so that every link doesn't result in all the built-in functions showing up as multiply defined. As soon as the built-in functions are stored in a separate compilation unit, ir_function_signature::is_built_in can be removed.
2010-07-12ir_function_signature: Add method to get the function owning a signatureIan Romanick
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.
2010-07-12glsl2: Add utility function clone_ir_listIan Romanick
2010-07-12ir_call: Add method to set the function signature being calledIan Romanick
2010-07-12glsl2: Add a new pass at the IR level to break down matrix ops to vector ops.Eric Anholt
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-06glsl2: Clone methods return the type of the thing being clonedIan Romanick
This is as opposed to returning the type of the base class of the hierarchy.
2010-07-01glsl2: Add a pass to convert mod(a, b) to b * fract(a/b).Eric Anholt
This is used by the Mesa IR backend to implement mod, fixing glsl-fs-mod.
2010-07-01glsl2: Add ir_unop_fract as an expression type.Eric Anholt
Most backends will prefer seeing this to seeing (a - floor(a)), so represent it explicitly.
2010-06-30glsl2: Define new ir_discard instruction.Kenneth Graunke
2010-06-29ir_to_mesa: Start adding support for texture instructions.Eric Anholt
Fixes: glsl-fs-bug25902 glsl-fs-sampler-numbering glsl-lod-bias
2010-06-29ir_swizzle: Add new constructor, refactor constructorsIan Romanick
Adds a new constructor that takes an array of component values. Refactors the meat of the two constructors to an init_mask method.
2010-06-24glsl2: Move the compiler to the subdirectory it will live in in Mesa.Eric Anholt