On 09/26/2011 12:05 PM, Chad Versace wrote:
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<stereotype...@gmail.com>
Signed-off-by: Chad Versace<c...@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;
+   }

The GLES2 bits are unnecessary. There's only OpenGL ES 2.0. The GLES1 bits also have dubious merit. As far as I'm aware, there's only one driver (radeon) in Mesa that supports OpenGL ES 1.0 and not 1.1.

+   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);

Missing white space after commas.

+
     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.");
     }


_______________________________________________
mesa-dev mailing list
mesa-dev@lists.freedesktop.org
http://lists.freedesktop.org/mailman/listinfo/mesa-dev

Reply via email to