On 11 November 2011 02:56, Kenneth Graunke <kenn...@whitecape.org> wrote:
> When matching function signatures across multiple linked shaders, we > often want to see if the current shader has _any_ match, but also know > whether or not it was exact. (If not, we may want to keep looking.) > > This could be done via the existing mechanisms: > > sig = f->exact_matching_signature(params); > if (sig != NULL) { > exact = true; > } else { > sig = f->matching_signature(params); > exact = false; > } > > However, this requires walking the list of function signatures twice, > which also means walking each signature's formal parameter lists twice. > This could be rather expensive. > > Since matching_signature already internally knows whether a match was > exact or not, we can just return it to get that information for free. > > Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> > --- > src/glsl/ir.h | 7 +++++++ > src/glsl/ir_function.cpp | 11 +++++++++++ > 2 files changed, 18 insertions(+), 0 deletions(-) > > diff --git a/src/glsl/ir.h b/src/glsl/ir.h > index 5878c05..6d40913 100644 > --- a/src/glsl/ir.h > +++ b/src/glsl/ir.h > @@ -566,6 +566,13 @@ public: > > /** > * Find a signature that matches a set of actual parameters, taking > implicit > + * conversions into account. Also flags whether the match was exact. > + */ > + ir_function_signature *matching_signature(const exec_list > *actual_param, > + bool &match_is_exact); > Minor quibble: I'd prefer to make match_is_exact a pointer, so that in the caller, it's obvious that the value of match_is_exact is going to be changed. In any case, this patch is: Reviewed-by: Paul Berry <stereotype...@gmail.com>
_______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev