summaryrefslogtreecommitdiffstats
path: root/src/glsl/linker.cpp
Commit message (Collapse)AuthorAgeFilesLines
* glsl2: Fail linking where the FS reads a varying that the VS doesn't write.Eric Anholt2010-07-281-7/+30
| | | | | | Fixes: glsl1-varying read but not written glsl1-varying var mismatch
* glsl2: Unmark unwritten varyings as varying.Eric Anholt2010-07-281-0/+1
| | | | | This fixes an assertion failure in ir_to_mesa, and the varying won't take up varying space.
* glsl2: Actually use the linked dead code eliminator.Eric Anholt2010-07-271-1/+1
| | | | | | I managed to revert the change from unlinked at some point while cleaning up the changes. glsl-fs-raytrace-bug27060 drops from 389 instructions to 370.
* glsl2: Use ir_dead_code's linked version after linking.Eric Anholt2010-07-271-3/+1
| | | | | glsl-fs-raytrace-bug27060 goes from 485 Mesa IR instructions to 389 before Mesa IR optimization.
* Merge remote branch 'origin/master' into glsl2Eric Anholt2010-07-261-1/+1
| | | | | | | | | | | This pulls in multiple i965 driver fixes which will help ensure better testing coverage during development, and also gets past the conflicts of the src/mesa/shader -> src/mesa/program move. Conflicts: src/mesa/Makefile src/mesa/main/shaderapi.c src/mesa/main/shaderobj.h
* linker: Link built-in functions instead of including them in every shaderIan Romanick2010-07-211-1/+22
| | | | | | | | 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.
* linker: Do post-link lowering and optimizationIan Romanick2010-07-201-0/+38
| | | | The lowering code should probably be moved elsewhere.
* glsl2: Add and use new variable mode ir_var_temporaryIan Romanick2010-07-201-6/+44
| | | | | | | | | | | | | | | | | 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'.
* linker: Remove the FINISHME comment for intrastage linkingIan Romanick2010-07-191-1/+2
|
* linker: Remove redundant check for 'main' in shadersIan Romanick2010-07-191-10/+0
| | | | This is now handled in link_intrastage_shaders.
* linker: Track and validate GLSL versions used in shadersIan Romanick2010-07-191-0/+21
|
* linker: Add comment about bug in initializer handlingIan Romanick2010-07-191-0/+8
|
* linker: First bits of intrastage, intershader function linkingIan Romanick2010-07-191-0/+2
| | | | | | 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.
* linker: Remove some unnecessary includesIan Romanick2010-07-191-2/+0
|
* linker: Use foreach_list_safe in move_non_declarationsIan Romanick2010-07-191-1/+1
| | | | | | 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.
* linker: Move global instructions from the linked shader firstIan Romanick2010-07-191-4/+8
| | | | | | 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.
* glsl2: When linking makes a variable not a varying output, make it ir_var_auto.Eric Anholt2010-07-131-1/+4
| | | | | This almost fixes glsl-unused-varying, except that the used varying gets assigned to the first varying slot (position).
* glsl2: Remove unnecessary casts of clone return valuesIan Romanick2010-07-131-2/+1
|
* linker: Merge global-scope instructions into mainIan Romanick2010-07-121-0/+121
| | | | | | | | Find instructions in all shaders that are not contained in a function (i.e., initializers for global variables). "Move" these instructions to the top of the main function in the linked shader. As a side-effect, many global variables will also be copied into the linked shader.
* linker: Detect the shader that contains "main" during intrastage linkingIan Romanick2010-07-121-5/+45
|
* linker: Implement first bits of intrastage linkingIan Romanick2010-07-121-2/+58
| | | | | | | 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.
* linker: Refactor cross_validate_uniforms into cross_validate_globalsIan Romanick2010-07-121-13/+54
| | | | The later, more generic function will be used in the intra-stage linker.
* linker: Stub-out intrastage linkerIan Romanick2010-07-121-14/+67
|
* linker: Use bit-0 instead of VERT_BIT_GENERIC0Ian Romanick2010-07-071-1/+1
| | | | | | 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.
* glsl2: Allow a fragment shader to not write a color.Eric Anholt2010-06-301-6/+0
| | | | | | I can't find any text justifying this check, and it caused a reasonable-looking shader in glsl-bug-22603 (which writes only gl_FragDepth) to fail.
* linker: Don't dynamically allocate slots for linked shadersIan Romanick2010-06-301-2/+0
| | | | | The can be at most one shader per stage. There are currently only two stages. There is zero reason to dynamically size this array.
* linker: Don't automatically allocate VERT_ATTRIB_GENERIC0Ian Romanick2010-06-301-0/+6
|
* glsl2: Use Mesa's gl_shader_program instead of our own struct glsl_program.Eric Anholt2010-06-301-8/+8
| | | | This avoids more allocation and shuffling of data around.
* glsl2: Move our data from a glsl_shader* on the side to the main gl_shader *.Eric Anholt2010-06-301-24/+24
| | | | | This saves recompiling at link time. gl_shader->ir is made a pointer so that we don't have to bring exec_list into mtypes.h.
* glsl2: Wrap includes of C interfaces with extern "C".Eric Anholt2010-06-241-0/+2
|
* glsl2: Move the compiler to the subdirectory it will live in in Mesa.Eric Anholt2010-06-241-0/+871