summaryrefslogtreecommitdiffstats
path: root/src/glsl/link_functions.cpp
Commit message (Collapse)AuthorAgeFilesLines
* linker: Only over-ride built-ins when a prototype has been seenIan Romanick2011-07-171-5/+17
| | | | | | | | | | | | | | | | | | | | | | | | | | The GLSL spec says: "If a built-in function is redeclared in a shader (i.e., a prototype is visible) before a call to it, then the linker will only attempt to resolve that call within the set of shaders that are linked with it." This patch enforces this behavior. When a function call is processed a flag is set in the ir_call to indicate whether the previously seen prototype is the built-in or not. At link time a call will only bind to an instance of a function that matches the "want built-in" setting in the ir_call. This has the odd side effect that first call to abs() in the shader below will call the built-in and the second will not: float foo(float x) { return abs(x); } float abs(float x) { return -x; } float bar(float x) { return abs(x); } This seems insane, but it matches what the spec says. Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=31744
* linker: Add imported functions to the linked IRIan Romanick2011-03-081-1/+7
| | | | | | Fixes piglit test glsl-function-chain16 and bugzilla #34203. NOTE: This is a candidate for stable release branches.
* Use C-style system headers in C++ code to avoid issues with std:: namespaceIan Romanick2011-02-211-4/+0
|
* linker: Propagate max_array_access while linking functionsIan Romanick2011-01-251-0/+12
| | | | | | | | | Update the max_array_access of a global as functions that use that global are pulled into the linked shader. Fixes piglit test glsl-fs-implicit-array-size-01 and bugzilla #33219. NOTE: This is a candidate for the 7.9 and 7.10 branches.
* glsl, i965: Remove unnecessary talloc includes.Kenneth Graunke2011-01-211-4/+0
| | | | These are already picked up by ir.h or glsl_types.h.
* glsl: Make the symbol table's add_variable just use the variable's name.Eric Anholt2010-11-291-1/+1
|
* linker: Require an exact matching signature when looking for prototypes.Kenneth Graunke2010-08-301-1/+1
| | | | | | | Fixes piglit test glsl-override-builtin. The linker incorrectly found the prototype for the float signature, rather than adding a new prototype with the int return type. This caused ir_calls with type int to have their callees set to the float signature, triggering an assert.
* glsl: Include main/core.h.Chia-I Wu2010-08-241-1/+1
| | | | Make glsl include only main/core.h from core mesa.
* glsl2: Make the clone() method take a talloc context.Eric Anholt2010-08-041-3/+3
| | | | | | | 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: Update the callee pointer of calls to newly-linked-in functions.Eric Anholt2010-07-301-0/+2
| | | | | | Otherwise, ir_function_inlining will see the body of the function from the unlinked version of the shader, which won't have had the lowering passes done on it or linking's variable remapping.
* linker: Recursively resolve function calls in imported functionsIan Romanick2010-07-191-3/+46
|
* linker: look up function signatures during linking instead of using calleeIan Romanick2010-07-191-24/+59
| | | | | | | Instead of using ir_call::callee, search for the signature in the linked shader. This will allow resolving calls from functions imported from other shaders. The ir_call::callee pointer in the imported function will still reference a signature in the original shader.
* linker: Pull find_matching_signature out of call_link_visitorIan Romanick2010-07-191-21/+27
| | | | | | The list of shaders to search needs to be provided as an explicit parameter to support coming changes. At that point there is no reason for it to be in the class. Also, fix some of the 'const' decorators.
* linker: First bits of intrastage, intershader function linkingIan Romanick2010-07-191-0/+176
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.