glsl: Add a new matching_signature() variant that returns exact/inexact.
authorKenneth Graunke <kenneth@whitecape.org>
Fri, 11 Nov 2011 08:48:14 +0000 (00:48 -0800)
committerKenneth Graunke <kenneth@whitecape.org>
Tue, 15 Nov 2011 01:17:39 +0000 (17:17 -0800)
commit861d0a5e12b1baa31211cb8aff983b8fb9b97482
tree55504c0a5abee5f7ee984df1fd8cff14bcd0d838
parent4f7c21899ad449be2bc1157ce1d2d99296a34499
glsl: Add a new matching_signature() variant that returns exact/inexact.

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 <kenneth@whitecape.org>
Reviewed-by: Paul Berry <stereotype441@gmail.com>
src/glsl/ir.h
src/glsl/ir_function.cpp