mesa: Don't advertise GLES extensions in GL contexts
authorChad Versace <chad.versace@linux.intel.com>
Tue, 4 Sep 2012 17:02:43 +0000 (10:02 -0700)
committerChad Versace <chad.versace@linux.intel.com>
Thu, 6 Sep 2012 18:46:04 +0000 (11:46 -0700)
glGetStringi(GL_EXTENSIONS) failed to respect the context's API, and so
returned all internally enabled GLES extensions from a GL context.
Likewise, glGetIntegerv(GL_NUM_EXTENSIONS) also failed to repsect the
context's API.

Note: This is a candidate for the 8.0 and 9.0 branches.
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Chad Versace <chad.versace@linux.intel.com>
src/mesa/main/extensions.c

index 36e1fcf62dbc096374bc4aedcfb0b967fc322a0b..e6f4541f0444978bef0ad9557cc4ca38e0eb849d 100644 (file)
@@ -927,7 +927,7 @@ _mesa_get_extension_count(struct gl_context *ctx)
 
    base = (GLboolean *) &ctx->Extensions;
    for (i = extension_table; i->name != 0; ++i) {
-      if (base[i->offset]) {
+      if (base[i->offset] && (i->api_set & (1 << ctx->API))) {
         ctx->Extensions.Count++;
       }
    }
@@ -947,10 +947,11 @@ _mesa_get_enabled_extension(struct gl_context *ctx, GLuint index)
    base = (GLboolean*) &ctx->Extensions;
    n = 0;
    for (i = extension_table; i->name != 0; ++i) {
-      if (n == index && base[i->offset]) {
-        return (const GLubyte*) i->name;
-      } else if (base[i->offset]) {
-        ++n;
+      if (base[i->offset] & (i->api_set & (1 << ctx->API))) {
+         if (n == index)
+            return (const GLubyte*) i->name;
+         else
+            ++n;
       }
    }