mesa/extensions: Create _mesa_extension_supported()
authorNanley Chery <nanley.g.chery@intel.com>
Wed, 2 Sep 2015 18:53:16 +0000 (11:53 -0700)
committerNanley Chery <nanley.g.chery@intel.com>
Thu, 12 Nov 2015 21:10:37 +0000 (13:10 -0800)
Create a function which determines if an extension is supported in the
current context.

v2: Use common variable names (Emil)
    Insert new line between variables and return statement (Chad)
    Rename api_set variable to api_bit (Chad)

Signed-off-by: Nanley Chery <nanley.g.chery@intel.com>
Reviewed-by: Chad Versace <chad.versace@intel.com>
src/mesa/main/extensions.c

index 4fd7487e7e22ef7e835d4be402f750585f9c0e40..83c492130f20bb8281af54600cd0ae255fbc9b2e 100644 (file)
@@ -425,6 +425,24 @@ _mesa_init_extensions(struct gl_extensions *extensions)
 typedef unsigned short extension_index;
 
 
+/**
+ * Given an extension enum, return whether or not the extension is supported
+ * dependent on the following factors:
+ * There's driver support and the OpenGL/ES version is at least that
+ * specified in the extension_table.
+ */
+static inline bool
+_mesa_extension_supported(const struct gl_context *ctx, extension_index i)
+{
+   const bool *base = (bool *) &ctx->Extensions;
+   const struct extension *ext = extension_table + i;
+   const uint8_t api_bit = 1 << ctx->API;
+
+   return (ext->api_set & api_bit) &&
+          (ctx->Version >= ext->version[ctx->API]) &&
+          base[ext->offset];
+}
+
 /**
  * Compare two entries of the extensions table.  Sorts first by year,
  * then by name.