From c4cf2513e60a90a5b3a6238684a6b51e1f501864 Mon Sep 17 00:00:00 2001 From: Brian Paul Date: Tue, 19 Aug 2008 11:23:25 -0600 Subject: [PATCH] mesa: glsl: limit function matching through casting --- src/mesa/shader/slang/slang_codegen.c | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/mesa/shader/slang/slang_codegen.c b/src/mesa/shader/slang/slang_codegen.c index f96c6557596..e5a2c61d4f3 100644 --- a/src/mesa/shader/slang/slang_codegen.c +++ b/src/mesa/shader/slang/slang_codegen.c @@ -1980,6 +1980,12 @@ _slang_gen_function_call_name(slang_assemble_ctx *A, const char *name, fun = _slang_locate_struct_constructor(A, name); } + /* + * At this point, some heuristics are used to try to find a function + * that matches the calling signature by means of casting or "unrolling" + * of constructors. + */ + if (!fun && _slang_is_vec_mat_type(name)) { /* Next, if this call looks like a vec() or mat() constructor call, * try "unwinding" the args to satisfy a constructor. @@ -1995,7 +2001,7 @@ _slang_gen_function_call_name(slang_assemble_ctx *A, const char *name, } } - if (!fun) { + if (!fun && _slang_is_vec_mat_type(name)) { /* Next, try casting args to the types of the formal parameters */ int numArgs = oper->num_children; fun = _slang_find_function_by_argc(A->space.funcs, name, numArgs); @@ -2008,6 +2014,13 @@ _slang_gen_function_call_name(slang_assemble_ctx *A, const char *name, assert(fun); } + if (!fun) { + slang_info_log_error(A->log, + "Function '%s' not found (check argument types)", + name); + return NULL; + } + n = _slang_gen_function_call(A, fun, oper, dest); if (n && !n->Store && !dest -- 2.30.2