[Mesa-dev] [PATCH 2/4] mesa version: add _mesa_get_gl_version_override

Jordan Justen jordan.l.justen at intel.com
Fri Feb 22 11:27:33 PST 2013


This will allow other code to get access to the override
version before a context is available.

Signed-off-by: Jordan Justen <jordan.l.justen at intel.com>
---
 src/mesa/main/version.c |   94 +++++++++++++++++++++++++++++++++--------------
 src/mesa/main/version.h |    3 ++
 2 files changed, 70 insertions(+), 27 deletions(-)

diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c
index e944a55..c903189 100644
--- a/src/mesa/main/version.c
+++ b/src/mesa/main/version.c
@@ -50,6 +50,45 @@ check_for_ending(const char *string, const char *ending)
 }
 
 /**
+ * Returns the gl override data
+ *
+ * version > 0 indicates there is an override requested
+ * fwd_context is only valid if version > 0
+ */
+static void
+get_gl_override(int *version, GLboolean *fwd_context)
+{
+   const char *env_var = "MESA_GL_VERSION_OVERRIDE";
+   const char *version_str;
+   int major, minor, n;
+   static int override_version = -1;
+   static GLboolean fc_suffix = GL_FALSE;
+
+   if (override_version < 0) {
+      override_version = 0;
+
+      version_str = getenv(env_var);
+      if (version_str) {
+         fc_suffix = check_for_ending(version_str, "FC");
+
+         n = sscanf(version_str, "%u.%u", &major, &minor);
+         if (n != 2) {
+            fprintf(stderr, "error: invalid value for %s: %s\n", env_var, version_str);
+            override_version = 0;
+         } else {
+            override_version = major * 10 + minor;
+            if (override_version < 30 && fc_suffix) {
+               fprintf(stderr, "error: invalid value for %s: %s\n", env_var, version_str);
+            }
+         }
+      }
+   }
+
+   *version = override_version;
+   *fwd_context = fc_suffix;
+}
+
+/**
  * Builds the MESA version string.
  */
 static void
@@ -87,41 +126,42 @@ create_version_string(struct gl_context *ctx, const char *prefix)
 void
 _mesa_override_gl_version(struct gl_context *ctx)
 {
-   const char *env_var = "MESA_GL_VERSION_OVERRIDE";
-   const char *version;
-   int n;
-   int major, minor;
-   GLboolean fc_suffix;
+   int version;
+   GLboolean fwd_context;
 
-   version = getenv(env_var);
-   if (!version) {
-      return;
-   }
+   get_gl_override(&version, &fwd_context);
 
-   fc_suffix = check_for_ending(version, "FC");
-
-   n = sscanf(version, "%u.%u", &major, &minor);
-   if (n != 2) {
-      fprintf(stderr, "error: invalid value for %s: %s\n", env_var, version);
-   } else {
-      ctx->Version = major * 10 + minor;
-      if (ctx->Version < 30 && fc_suffix) {
-         fprintf(stderr, "error: invalid value for %s: %s\n", env_var, version);
+   if (version > 0) {
+      ctx->Version = version;
+      if (version >= 30 && fwd_context) {
+         ctx->API = API_OPENGL_CORE;
+         ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT;
+      } else if (version >= 31) {
+         ctx->API = API_OPENGL_CORE;
       } else {
-         if (ctx->Version >= 30 && fc_suffix) {
-            ctx->API = API_OPENGL_CORE;
-            ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT;
-         } else if (ctx->Version >= 31) {
-            ctx->API = API_OPENGL_CORE;
-         } else {
-            ctx->API = API_OPENGL_COMPAT;
-         }
-         create_version_string(ctx, "");
+         ctx->API = API_OPENGL_COMPAT;
       }
+      create_version_string(ctx, "");
    }
 }
 
 /**
+ * Returns the gl override value
+ *
+ * version > 0 indicates there is an override requested
+ */
+int
+_mesa_get_gl_version_override(void)
+{
+   int version;
+   GLboolean fwd_context;
+
+   get_gl_override(&version, &fwd_context);
+
+   return version;
+}
+
+/**
  * Override the context's GLSL version if the environment variable
  * MESA_GLSL_VERSION_OVERRIDE is set. Valid values for
  * MESA_GLSL_VERSION_OVERRIDE are integers, such as "130".
diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h
index 8167ed0..c1cb317 100644
--- a/src/mesa/main/version.h
+++ b/src/mesa/main/version.h
@@ -51,4 +51,7 @@ _mesa_override_gl_version(struct gl_context *ctx);
 extern void
 _mesa_override_glsl_version(struct gl_context *ctx);
 
+extern int
+_mesa_get_gl_version_override(void);
+
 #endif /* VERSION_H */
-- 
1.7.10.4



More information about the mesa-dev mailing list