[Mesa-dev] [PATCH] mesa: Allow override of GL version with environment variables

Chad Versace chad at chad-versace.us
Mon Sep 26 12:05:42 PDT 2011


It is necessary to manually set the GL version to 3.0 in order to run
Piglit tests using glGetUniform*().

This patch allows one to override the version of an OpenGL, OpenGL ES1, or
OpenGL ES2 context by setting the environment variable MESA_GL_VERSION,
MESA_GLES1_VERSION, or MESA_GLES2_VERSION.

CC: Paul Berry <stereotype441 at gmail.com>
Signed-off-by: Chad Versace <chad at chad-versace.us>
---
 src/mesa/main/version.c |   55 +++++++++++++++++++++++++++++++++++++++++++++-
 1 files changed, 53 insertions(+), 2 deletions(-)

diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c
index 80fa0c2..128c3af 100644
--- a/src/mesa/main/version.c
+++ b/src/mesa/main/version.c
@@ -27,7 +27,40 @@
 #include "version.h"
 #include "git_sha1.h"
 
+/**
+ * \brief Override GL version
+ *
+ */
+static void
+override_version(struct gl_context *ctx, GLuint *major, GLuint *minor)
+{
+   const char *env_var;
+   const char *version;
+   int n;
+
+   switch (ctx->API) {
+   case API_OPENGL:
+      env_var = "MESA_GL_VERSION";
+      break;
+   case API_OPENGLES:
+      env_var = "MESA_GLES1_VERSION";
+      break;
+   case API_OPENGLES2:
+      env_var = "MESA_GLES2_VERSION";
+      break;
+   }
 
+   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.
@@ -183,6 +216,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,
@@ -213,13 +249,20 @@ compute_version_es1(struct gl_context *ctx)
                               ctx->Extensions.SGIS_generate_mipmap &&
                               ctx->Extensions.ARB_vertex_buffer_object);
 
+   /* Set to 0 so that we can detect if the version is not set. */
+   ctx->VersionMajor = 0;
+
    if (ver_1_1) {
       ctx->VersionMajor = 1;
       ctx->VersionMinor = 1;
    } else if (ver_1_0) {
       ctx->VersionMajor = 1;
       ctx->VersionMinor = 0;
-   } else {
+   }
+
+   override_version(ctx, &ctx->VersionMajor, &ctx->VersionMinor);
+
+   if (ctx->VersionMajor == 0) {
       _mesa_problem(ctx, "Incomplete OpenGL ES 1.0 support.");
    }
 
@@ -253,10 +296,18 @@ compute_version_es2(struct gl_context *ctx)
                               ctx->Extensions.ARB_fragment_shader &&
                               ctx->Extensions.ARB_texture_non_power_of_two &&
                               ctx->Extensions.EXT_blend_equation_separate);
+
+   /* Set to 0 so that we can detect if the version is not set. */
+   ctx->VersionMajor = 0;
+
    if (ver_2_0) {
       ctx->VersionMajor = 2;
       ctx->VersionMinor = 0;
-   } else {
+   }
+
+   override_version(ctx, &ctx->VersionMajor, &ctx->VersionMinor);
+
+   if (ctx->VersionMajor == 0) {
       _mesa_problem(ctx, "Incomplete OpenGL ES 2.0 support.");
    }
 
-- 
1.7.6.2



More information about the mesa-dev mailing list