summaryrefslogtreecommitdiff
path: root/src/glsl/ir.cpp
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2011-06-29 14:52:10 -0700
committerIan Romanick <ian.d.romanick@intel.com>2011-07-19 16:39:56 -0700
commita90b88f3544e4d45793228fcd64561077593fe71 (patch)
tree998ffaa840c6029eac8f3d4b0552c4a3c50b822d /src/glsl/ir.cpp
parent0e699cc0e823655bc0085477a55a528f45c2cafd (diff)
linker: Only over-ride built-ins when a prototype has been seen
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 (cherry picked from commit 66f4ac988d5053c9782d1390541b04f4d9c50078)
Diffstat (limited to 'src/glsl/ir.cpp')
0 files changed, 0 insertions, 0 deletions