summaryrefslogtreecommitdiffstats
path: root/src/mesa/main
diff options
context:
space:
mode:
authorEric Engestrom <[email protected]>2018-11-20 09:57:41 +0000
committerEric Engestrom <[email protected]>2019-06-30 01:45:36 +0100
commit74f064ae908f0ec39fee7a1c5202a4b42255a245 (patch)
tree56a7ffe5bd25736014552736e4027d5651b53c5c /src/mesa/main
parentb738d4494c4a4612dd5af2bb6019d7765c1619a7 (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')
-rw-r--r--src/mesa/main/extensions.c22
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;
}