diff options
author | Eric Engestrom <[email protected]> | 2018-11-20 09:57:41 +0000 |
---|---|---|
committer | Eric Engestrom <[email protected]> | 2019-06-30 01:45:36 +0100 |
commit | 74f064ae908f0ec39fee7a1c5202a4b42255a245 (patch) | |
tree | 56a7ffe5bd25736014552736e4027d5651b53c5c /src/mesa/main/extensions.c | |
parent | b738d4494c4a4612dd5af2bb6019d7765c1619a7 (diff) |
mesa: use binary search for MESA_EXTENSION_OVERRIDE
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 <[email protected]>
Reviewed-by: Tapani Pälli <[email protected]>
Diffstat (limited to 'src/mesa/main/extensions.c')
-rw-r--r-- | src/mesa/main/extensions.c | 22 |
1 files changed, 16 insertions, 6 deletions
diff --git a/src/mesa/main/extensions.c b/src/mesa/main/extensions.c index 4d95a072793..0aeda39cc22 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; } |