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

Ian Romanick idr at freedesktop.org
Mon Sep 26 12:57:34 PDT 2011


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

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



More information about the mesa-dev mailing list