aboutsummaryrefslogtreecommitdiffstats
path: root/src/glsl/linker.cpp
Commit message (Collapse)AuthorAgeFilesLines
* glsl2: Add a pass for removing unused functions.Eric Anholt2010-08-051-0/+1
| | | | | | | | | For a shader involving many small functions, this avoids running optimization across all of them after they've been inlined post-linking. Reduces the runtime of linking and running a fragment shader from Yo Frankie from 1.6 seconds to 0.9 seconds (-44.9%, +/- 3.3%).
* glsl2: Remove the shader_in/shader_out tracking separate from var->mode.Eric Anholt2010-08-041-2/+0
| | | | | | | | | | | | | | | I introduced this for ir_dead_code to distinguish function parameter outvals from varying outputs. Only, since ast_to_hir's current_function is unset when setting up function parameters (they're needed for making the function signature in the first place), all function parameter outvals were marked as shader outputs anyway. This meant that an inlined function's cloned outval was marked as a shader output and couldn't be dead-code eliminated. Instead, since ir_dead_code doesn't even look at function parameters, just use var->mode. The longest Mesa IR coming out of ir_to_mesa for Yo Frankie drops from 725 instructions to 636.
* glsl2: Use linked ir_constant_variable after linking, instead of unlinked.Eric Anholt2010-08-041-1/+1
|
* glsl2: Don't try to assign locations for samplers during linking.Eric Anholt2010-08-041-0/+3
| | | | | | Mesa will do the mapping at _mesa_add_sampler() time. Fixes assertion failures in debug builds, which might have caught real problems with multiple samplers linked in a row.
* glsl2: Make the clone() method take a talloc context.Eric Anholt2010-08-041-11/+14
| | | | | | | In most cases, we needed to be reparenting the cloned IR to a different context (for example, to the linked shader instead of the unlinked shader), or optimization before the reparent would cause memory usage of the original object to grow and grow.
* glsl2: Give the path within src/mesa/ for headers instead of relying on -I.Aras Pranckevicius2010-08-021-1/+1
|
* glsl2: Do algebraic optimizations after linking as well.Eric Anholt2010-07-311-0/+1
| | | | | Linking brings in inlining of builtins, so we weren't catching the (rcp(/sqrt(x)) -> rsq(x)) without it.
* glsl2: Add new tree grafting optimization pass.Eric Anholt2010-07-311-0/+1
|
* glsl2: Fix spelling of "sentinel."Eric Anholt2010-07-291-1/+1
|
* 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