summaryrefslogtreecommitdiff
path: root/src/glsl/ast_function.cpp
AgeCommit message (Collapse)Author
2010-08-31glsl2: Write vector constructor constants in a single assignmentIan Romanick
Make two passes over the constructor parameters. Write all of the constants in a single write, then write the non-constants one at a time. This causes the fragment shader varying float g; void main() { gl_FragColor = vec4(0.0, g, 0.0, 1.0); } to generate (function main (signature void (parameters ) ( (declare (temporary ) vec4 vec_ctor@0x8580058) (assign (constant bool (1)) (xzw) (var_ref vec_ctor@0x8580058) (constant vec4 (0.000000 0.000000 0.000000 1.000000)) ) (assign (constant bool (1)) (y) (var_ref vec_ctor@0x8580058) (swiz xxxx (var_ref g@0x8580218) )) (assign (constant bool (1)) (xyzw) (var_ref gl_FragColor@0x84d32a0) (var_ref vec_ctor@0x8580058) ) )) ) instead of (function main (signature void (parameters ) ( (declare (temporary ) vec4 vec_ctor@0x8580058) (assign (constant bool (1)) (x) (var_ref vec_ctor@0x8580058) (constant vec4 (0.000000 0.000000 0.000000 1.000000)) ) (assign (constant bool (1)) (y) (var_ref vec_ctor@0x8580058) (swiz xxxx (var_ref g@0x8580218) )) (assign (constant bool (1)) (z) (var_ref vec_ctor@0x8580058) (constant vec4 (0.000000 0.000000 0.000000 1.000000)) ) (assign (constant bool (1)) (w) (var_ref vec_ctor@0x8580058) (constant vec4 (0.000000 0.000000 0.000000 1.000000)) ) (assign (constant bool (1)) (xyzw) (var_ref gl_FragColor@0x84d32a0) (var_ref vec_ctor@0x8580058) ) )) ) A similar optimization could be done for matrix constructors, but it is a little more complicate there.
2010-08-29glsl: Initialize data in ast_function_expression::hir.Vinson Lee
Completely initialize data that is passed to ir_constant constructor. Fixes piglit glsl-orangebook-ch06-bump valgrind uninitialized variable error on softpipe and llvmpipe.
2010-08-24glsl: Include main/core.h.Chia-I Wu
Make glsl include only main/core.h from core mesa.
2010-08-17glsl2: Fix transpose of rows and colsIan Romanick
This error led to an assertion failure for some constructors of non-square matrices. It only occured in matrices where the number of columns was greater than the number of rows. It didn't even always occur on those. Fixes piglit glslparsertest case constructor-16.vert.
2010-08-12glsl2: Use MIN2 from macros.h instead of open coding itIan Romanick
2010-08-05glsl2: Log a better error message when a matching function cannot be foundIan Romanick
2010-08-04glsl2: Generate masked assignments in vector and matrix constructorsIan Romanick
Previously the in-line matrix and vector constructors would generate swizzles in the LHS. The code is actually more clear if it just generates the masked assignments instead of relying on the ir_assignment constructor to convert the swizzles to write masks.
2010-08-04glsl2: Remove uses of deprecated TALLOC_CTX type.Kenneth Graunke
2010-08-03glsl2: No need to strdup the name passed in to ir_variable constructor.Eric Anholt
ir_variable always strdups the incoming name so that it matches the lifetime of the ir_variable.
2010-07-29glsl2: Fix spelling of "sentinel."Eric Anholt
2010-07-28ast_function: Set constant_value on return value temporaries in 1.20+.Kenneth Graunke
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-21glsl2: Emit array constructors inline.Kenneth Graunke
2010-07-21glsl2: Add some comments.Kenneth Graunke
2010-07-21glsl2: Replace insert_before/remove pairs with exec_node::replace_with.Kenneth Graunke
2010-07-20glsl2: glsl_type has its own talloc context, don't pass one inIan 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-20glsl2: Always insert function calls into the instruction stream.Eric Anholt
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-18glsl2: Remove the const disease from function signature's callee.Eric Anholt
2010-07-14ast_function: Actually do type conversion on function arguments.Kenneth Graunke
2010-07-09ast_function: Fix non-float constructors with matrix arguments.Kenneth Graunke
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-09ast_function: Move error return earlier and don't indent the world.Kenneth Graunke
This has no functional changes.
2010-07-09ast_function: Remove unnecessary check for empty constructors.Kenneth Graunke
This case is already caught by a later check that ensures sufficient components were provided, based on the type.
2010-06-30glsl2: Use _mesa_glsl_parse_state as the talloc parent, not glsl_shader.Kenneth Graunke
_mesa_glsl_parse_state should be the parent for all temporary allocation done while compiling a shader. glsl_shader should only be used as the parent for the shader's final IR---the _result_ of compilation. Since many IR instructions may be added or discarded during optimization passes, IR should not ever be allocated to glsl_shader directly. Done via sed -i s/talloc_parent(state)/state/g and s/talloc_parent(st)/st/g. This also removes a ton of talloc_parent calls, which may help performance.
2010-06-29glsl2: Use talloc_strdup when generating constructor temporary namesIan Romanick
2010-06-29glsl2: Don't flatten constructor parameters to scalarsIan Romanick
Now that all scalar, vector, and matrix constructors are emitted in-line, the parameters to these constructors should not be flattened to a pile of scalars. Instead, the functions that emit the in-line constructor bodies can directly write the parameters to the correct locations in the objects being constructed.
2010-06-29glsl2: Always emit matrix constructors inlineIan Romanick
2010-06-29glsl2: Always emit vector constructors inlineIan Romanick
2010-06-28glsl2: Use i2b and f2b IR opcodes for casting int or float to boolIan Romanick
2010-06-24glsl2: Move the compiler to the subdirectory it will live in in Mesa.Eric Anholt