[Mesa-dev] [PATCH mesa] mesa: use binary search for MESA_EXTENSION_OVERRIDE

Tapani Pälli tapani.palli at intel.com
Fri Nov 23 06:07:46 UTC 2018


Reviewed-by: Tapani Pälli <tapani.palli at intel.com>

On 11/22/18 8:18 PM, Eric Engestrom wrote:
> Not a hot path obviously, but the table still has 425 extensions, which
> you can go through in just 9 steps with a binary search.
> 
> The table is already sorted, as required by other parts of the code and
> enforced by mesa's `main-test`.
> 
> Signed-off-by: Eric Engestrom <eric.engestrom at intel.com>
> ---
>   src/mesa/main/extensions.c | 22 ++++++++++++++++------
>   1 file changed, 16 insertions(+), 6 deletions(-)
> 
> diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c
> index 4d95a072793fa4c13b69..0aeda39cc22152073f52 100644
> --- a/src/mesa/main/extensions.c
> +++ b/src/mesa/main/extensions.c
> @@ -48,6 +48,13 @@ static char *unrecognized_extensions = NULL;
>    */
>   #define o(x) offsetof(struct gl_extensions, x)
>   
> +static int
> +extension_name_compare(const void *name, const void *elem)
> +{
> +   const struct mesa_extension *entry = elem;
> +   return strcmp(name, entry->name);
> +}
> +
>   /**
>    * Given an extension name, lookup up the corresponding member of struct
>    * gl_extensions and return that member's index.  If the name is
> @@ -59,15 +66,18 @@ static char *unrecognized_extensions = NULL;
>   static int
>   name_to_index(const char* name)
>   {
> -   unsigned i;
> +   const struct mesa_extension *entry;
>   
> -   if (name == 0)
> +   if (!name)
>         return -1;
>   
> -   for (i = 0; i < MESA_EXTENSION_COUNT; ++i) {
> -      if (strcmp(name, _mesa_extension_table[i].name) == 0)
> -	 return i;
> -   }
> +   entry = bsearch(name,
> +                   _mesa_extension_table, MESA_EXTENSION_COUNT,
> +                   sizeof(_mesa_extension_table[0]),
> +                   extension_name_compare);
> +
> +   if (entry)
> +      return entry - _mesa_extension_table;
>   
>      return -1;
>   }
> 


More information about the mesa-dev mailing list