summaryrefslogtreecommitdiffstats
path: root/src/mesa/main/get.c
diff options
context:
space:
mode:
authorImre Deak <[email protected]>2012-09-10 08:46:02 +0300
committerOliver McFadden <[email protected]>2012-10-10 12:43:08 +0300
commit59d3bf654289a328de43bb47207271a6a9f7e2f0 (patch)
tree164c6d4f846f0eb464942addd5378625ee9e35a5 /src/mesa/main/get.c
parent2ad4a4754744e71aca472f77e64168dd1a962422 (diff)
mesa: glGet: simplify the 'enum not found' condition
When traversing the hash table looking up an enum that is invalid we eventually reach the first element in the descriptor array. By looking at the type of that element, which is always TYPE_API_MASK, we know that we can stop the search and return error. Since this element is always the first it's enough to check for its index being 0 without looking at its type. Later in this patchset, when we generate the hash tables during build time, this will allow us to remove the TYPE_API_MASK and related flags completly. Signed-off-by: Imre Deak <[email protected]> Reviewed-by: Brian Paul <[email protected]> Reviewed-by: Oliver McFadden <[email protected]>
Diffstat (limited to 'src/mesa/main/get.c')
-rw-r--r--src/mesa/main/get.c8
1 files changed, 5 insertions, 3 deletions
diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index b46492cf110..e09147b60c9 100644
--- a/src/mesa/main/get.c
+++ b/src/mesa/main/get.c
@@ -2004,16 +2004,18 @@ find_value(const char *func, GLenum pname, void **p, union value *v)
mask = Elements(table[api]) - 1;
hash = (pname * prime_factor);
while (1) {
- d = &values[table[api][hash & mask]];
+ int idx = table[api][hash & mask];
/* If the enum isn't valid, the hash walk ends with index 0,
- * which is the API mask entry at the beginning of values[]. */
- if (unlikely(d->type == TYPE_API_MASK)) {
+ * pointing to the first entry of values[] which doesn't hold
+ * any valid enum. */
+ if (unlikely(idx == 0)) {
_mesa_error(ctx, GL_INVALID_ENUM, "%s(pname=%s)", func,
_mesa_lookup_enum_by_nr(pname));
return &error_value;
}
+ d = &values[idx];
if (likely(d->pname == pname))
break;