Mesa (master): mesa: glGet: simplify the 'enum not found' condition

Oliver McFadden omcfadde at kemper.freedesktop.org
Wed Oct 10 09:45:15 UTC 2012


Module: Mesa
Branch: master
Commit: 59d3bf654289a328de43bb47207271a6a9f7e2f0
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=59d3bf654289a328de43bb47207271a6a9f7e2f0

Author: Imre Deak <imre.deak at intel.com>
Date:   Mon Sep 10 08:46:02 2012 +0300

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 <imre.deak at intel.com>
Reviewed-by: Brian Paul <brianp at vmware.com>
Reviewed-by: Oliver McFadden <oliver.mcfadden at linux.intel.com>

---

 src/mesa/main/get.c |    8 +++++---
 1 files changed, 5 insertions(+), 3 deletions(-)

diff --git a/src/mesa/main/get.c b/src/mesa/main/get.c
index b46492c..e09147b 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;
 




More information about the mesa-commit mailing list