summaryrefslogtreecommitdiffstats
path: root/src/glsl/ir.cpp
diff options
context:
space:
mode:
authorKenneth Graunke <[email protected]>2013-08-30 00:06:30 -0700
committerKenneth Graunke <[email protected]>2013-09-09 11:52:16 -0700
commit0823a87a7520c79708d6990f761b871c41ebffdf (patch)
tree3166c435d90f5aeb0547caffa124530fe6c9180e /src/glsl/ir.cpp
parentd403a105735f2b56e24092b1c25e2d3d108e15bc (diff)
glsl: Add a method to tell whether a built-in is available.
We can simply call the stored predicate function. If state is NULL, just report that the function is available. v2: Add a comment (requested by Paul Berry). Signed-off-by: Kenneth Graunke <[email protected]> Reviewed-by: Matt Turner <[email protected]> Reviewed-by: Paul Berry <[email protected]>
Diffstat (limited to 'src/glsl/ir.cpp')
-rw-r--r--src/glsl/ir.cpp17
1 files changed, 17 insertions, 0 deletions
diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp
index d9fb808c4b1..5e6cdaa0638 100644
--- a/src/glsl/ir.cpp
+++ b/src/glsl/ir.cpp
@@ -1596,6 +1596,23 @@ ir_function_signature::is_builtin() const
}
+bool
+ir_function_signature::is_builtin_available(const _mesa_glsl_parse_state *state) const
+{
+ /* We can't call the predicate without a state pointer, so just say that
+ * the signature is available. At compile time, we need the filtering,
+ * but also receive a valid state pointer. At link time, we're resolving
+ * imported built-in prototypes to their definitions, which will always
+ * be an exact match. So we can skip the filtering.
+ */
+ if (state == NULL)
+ return true;
+
+ assert(builtin_info != NULL);
+ return builtin_info(state);
+}
+
+
static bool
modes_match(unsigned a, unsigned b)
{