mesa: Allow override of GL version with environment variable
authorChad Versace <chad@chad-versace.us>
Mon, 26 Sep 2011 18:48:46 +0000 (11:48 -0700)
committerChad Versace <chad@chad-versace.us>
Tue, 27 Sep 2011 18:23:17 +0000 (11:23 -0700)
It is necessary to manually set the GL version to 3.0 in order to run
Piglit tests that use glGetUniform*().

This patch allows one to override the version of the OpenGL context by
setting the environment variable MESA_GL_VERSION_OVERRIDE.

Reviewed-by: Brian Paul <brianp@vmware.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Signed-off-by: Chad Versace <chad@chad-versace.us>
docs/envvars.html
src/mesa/main/version.c

index 986d2f8eb35ad1dab31e729b3447842844b5d30d..6402ec507277dd421e86774fbacb07b19fc87f01 100644 (file)
@@ -58,6 +58,10 @@ copied into a fixed-size buffer without truncating.
 If the extension string is too long, the buffer overrun can cause the game
 to crash.
 This is a work-around for that.
+<li>MESA_GL_VERSION_OVERRIDE - changes the value returned by
+glGetString(GL_VERSION). Valid values are point-separated version numbers,
+such as "3.0". Mesa will not really implement all the features of the given
+version if it's higher than what's normally reported.
 <li>MESA_GLSL - <a href="shading.html#envvars">shading language compiler options</a>
 </ul>
 
index 384281479a315cd5292daadecefd29adb997372d..a5deeabd2f1c8e8c7591334ec255553dee794cc5 100644 (file)
 #include "version.h"
 #include "git_sha1.h"
 
+/**
+ * Override the context's GL version if the environment variable
+ * MESA_GL_VERSION_OVERRIDE is set. Valid values of MESA_GL_VERSION_OVERRIDE
+ * are point-separated version numbers, such as "3.0".
+ */
+static void
+override_version(struct gl_context *ctx, GLuint *major, GLuint *minor)
+{
+   const char *env_var = "MESA_GL_VERSION_OVERRIDE";
+   const char *version;
+   int n;
+
+   version = getenv(env_var);
+   if (!version) {
+      return;
+   }
 
+   n = sscanf(version, "%d.%d", major, minor);
+   if (n != 2) {
+      fprintf(stderr, "error: invalid value for %s: %s\n", env_var, version);
+      return;
+   }
+}
 
 /**
  * Examine enabled GL extensions to determine GL version.
@@ -178,6 +200,9 @@ compute_version(struct gl_context *ctx)
 
    ctx->VersionMajor = major;
    ctx->VersionMinor = minor;
+
+   override_version(ctx, &ctx->VersionMajor, &ctx->VersionMinor);
+
    ctx->VersionString = (char *) malloc(max);
    if (ctx->VersionString) {
       _mesa_snprintf(ctx->VersionString, max,