summaryrefslogtreecommitdiff
path: root/src/glsl/linker.cpp
AgeCommit message (Collapse)Author
2010-09-08glsl: add several EmitNo* options, and MaxUnrollIterationsLuca Barbieri
This increases the chance that GLSL programs will actually work. Note that continues and returns are not yet lowered, so linking will just fail if not supported. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
2010-09-07glsl: Move is_builtin flag back to ir_function_signature.Kenneth Graunke
This effectively reverts b6f15869b324ae64a00d0fe46fa3c8c62c1edb6c. In desktop GLSL, defining a function with the same name as a built-in hides that built-in function completely, so there would never be built-in and user function signatures in the same ir_function. However, in GLSL ES, overloading built-ins is allowed, and does not hide the built-in signatures - so we're back to needing this.
2010-09-07linker: Fix assertion and cross-version checks for version 100.Kenneth Graunke
Fixes an assert (min_version >= 110) which was no longer correct, and also prohibits linking ES2 shaders with non-ES2 shaders. I'm not positive this is correct, but the specification doesn't seem to say.
2010-09-07glsl2: check for _NumLinkedShaders being 0Török Edvin
Otherwise spring 0.82+.4.0 crashes when starting a game because prog->_LinkedShaders[0] is NULL. This also fixes piglit test cases glsl-link-empty-prog-0[12].
2010-08-30linker: Handle varying arrays, matrices, and arrays of matricesIan Romanick
Fixes piglit test case glsl-array-varying-01.
2010-08-29linker: Treat sized and unsized array types as the sameIan Romanick
If two shaders contain variables declared with array types that have the same base type but one is sized and the other is not, linking should succeed. I'm not super pleased with the way this is implemented, and I am more convinced than ever that we need more linker tests. We especially need "negative" tests. Fixes bugzilla #29697 and piglit test glsl-link-array-01.
2010-08-26glsl: Move is_built_in flag from ir_function_signature to ir_function.Kenneth Graunke
Also rename it to "is_builtin" for consistency. Signed-off-by: Ian Romanick <ian.d.romanick@intel.com>
2010-08-25ir_to_mesa: Convert this code to using linker.cpp's uniform locations.Eric Anholt
Fixes: glsl-fs-uniform-array-4.
2010-08-25glsl: Make uniform linking generate separate uniforms for struct members.Eric Anholt
This is a step towards making the linker code usable as our uniform setup, instead of having it wedged into ir_to_mesa.cpp.
2010-08-24glsl: Include main/core.h.Chia-I Wu
Make glsl include only main/core.h from core mesa.
2010-08-23glsl: Count function call outvals as writing to variables for linker checks.Eric Anholt
Fixes: glsl-vs-position-outval. Bug #28138 (regnum online)
2010-08-23glsl: Trim the size of uniform arrays to the maximum element used.Eric Anholt
Fixes glsl-getactiveuniform-array-size.
2010-08-18glsl: Also strdup the names of uniform list entries for >vec4 types.Eric Anholt
Fixes double-free since the fix to free all of the uniform list.
2010-08-18mesa: Free old linked shaders when relinking new shaders.Eric Anholt
2010-08-17linker: Demote user-defined varyings in the VS-only caseIan Romanick
Fixes piglit test case glsl-vs-ff-frag and bugzilla #29623.
2010-08-16linker: Include compiler.h to avoid spurious warnings about INLINEIan Romanick
2010-08-13glsl2: Move the common optimization passes to a helper function.Eric Anholt
These are passes that we expect all codegen to be happy with. The other lowering passes for Mesa IR are moved to the Mesa IR generator.
2010-08-13linker: Assign attrib location 0 if gl_Vertex is not usedIan Romanick
If gl_Vertex is not used in the shader, then attribute location 0 is available for use. Fixes piglit test case glsl-getattriblocation (bugzilla #29540).
2010-08-09glsl2: Add a pass to transform ir_binop_sub to add(op0, neg(op1))Eric Anholt
All the current HW backends transform subtract to adding the negation, so I haven't bothered peepholing it back out in Mesa IR. This allows some subtract of subtract to get removed in ir_algebraic.
2010-08-09glsl2: Add constant propagation.Eric Anholt
Whereas constant folding evaluates constant expressions at rvalue nodes, constant propagation tracks constant components of vectors across execution to replace (possibly swizzled) variable dereferences with constant values, triggering possible constant folding or reduced variable liveness.
2010-08-06glsl2: Don't assert in a couple of places when encountering sampler arrays.Eric Anholt
Fixes glean shaderAPI.
2010-08-05glsl2: Add a pass to convert exp and log to exp2 and log2.Eric Anholt
Fixes ir_to_mesa handling of unop_log, which used the weird ARB_vp LOG opcode that doesn't do what we want. This also lets the multiplication coefficients in there get constant-folded, possibly. Fixes: glsl-fs-log
2010-08-05ir_structure_splitting: New pass to chop structures into their components.Eric Anholt
This doesn't do anything if your structure goes through an uninlined function call or if whole-structure assignment occurs. As such, the impact is limited, at least until we do some global copy propagation to reduce whole-structure assignment.
2010-08-05glsl2: Add a pass for removing unused functions.Eric Anholt
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%).
2010-08-04glsl2: Remove the shader_in/shader_out tracking separate from var->mode.Eric Anholt
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.
2010-08-04glsl2: Use linked ir_constant_variable after linking, instead of unlinked.Eric Anholt
2010-08-04glsl2: Don't try to assign locations for samplers during linking.Eric Anholt
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.
2010-08-04glsl2: Make the clone() method take a talloc context.Eric Anholt
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.
2010-08-02glsl2: Give the path within src/mesa/ for headers instead of relying on -I.Aras Pranckevicius
2010-07-31glsl2: Do algebraic optimizations after linking as well.Eric Anholt
Linking brings in inlining of builtins, so we weren't catching the (rcp(/sqrt(x)) -> rsq(x)) without it.
2010-07-31glsl2: Add new tree grafting optimization pass.Eric Anholt
2010-07-29glsl2: Fix spelling of "sentinel."Eric Anholt
2010-07-28glsl2: Fail linking where the FS reads a varying that the VS doesn't write.Eric Anholt
Fixes: glsl1-varying read but not written glsl1-varying var mismatch
2010-07-28glsl2: Unmark unwritten varyings as varying.Eric Anholt
This fixes an assertion failure in ir_to_mesa, and the varying won't take up varying space.
2010-07-27glsl2: Actually use the linked dead code eliminator.Eric Anholt
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.
2010-07-27glsl2: Use ir_dead_code's linked version after linking.Eric Anholt
glsl-fs-raytrace-bug27060 goes from 485 Mesa IR instructions to 389 before Mesa IR optimization.
2010-07-26Merge remote branch 'origin/master' into glsl2Eric Anholt
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
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-20linker: Do post-link lowering and optimizationIan Romanick
The lowering code should probably be moved elsewhere.
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-19linker: Remove the FINISHME comment for intrastage linkingIan Romanick
2010-07-19linker: Remove redundant check for 'main' in shadersIan Romanick
This is now handled in link_intrastage_shaders.
2010-07-19linker: Track and validate GLSL versions used in shadersIan Romanick
2010-07-19linker: Add comment about bug in initializer handlingIan Romanick
2010-07-19linker: First bits of intrastage, intershader function linkingIan Romanick
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-19linker: Remove some unnecessary includesIan Romanick
2010-07-19linker: Use foreach_list_safe in move_non_declarationsIan Romanick
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-19linker: Move global instructions from the linked shader firstIan Romanick
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-13glsl2: When linking makes a variable not a varying output, make it ir_var_auto.Eric Anholt
This almost fixes glsl-unused-varying, except that the used varying gets assigned to the first varying slot (position).
2010-07-13glsl2: Remove unnecessary casts of clone return valuesIan Romanick