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 <kenneth@whitecape.org> Reviewed-by: Matt Turner <mattst88@gmail.com> Reviewed-by: Paul Berry <stereotype441@gmail.com>
This commit is contained in:
@@ -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)
|
||||
{
|
||||
|
||||
@@ -686,6 +686,9 @@ public:
|
||||
/** Whether or not this function signature is a built-in. */
|
||||
bool is_builtin() const;
|
||||
|
||||
/** Whether or not a built-in is available for this shader. */
|
||||
bool is_builtin_available(const _mesa_glsl_parse_state *state) const;
|
||||
|
||||
/** Body of instructions in the function. */
|
||||
struct exec_list body;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user