[Mesa-dev] [PATCH] mesa: allow MESA_GL_VERSION_OVERRIDE to override the API type

Brian Paul brianp at vmware.com
Tue Sep 4 07:51:59 PDT 2012


On 09/01/2012 11:14 AM, Jordan Justen wrote:
> Change the format to [MAJOR.MINOR][CORE|COMPAT]
> For example: 3.0, CORE, COMPAT, 3.2CORE
>
> Signed-off-by: Jordan Justen<jordan.l.justen at intel.com>
> ---
>   docs/envvars.html       |   11 +++--
>   src/mesa/main/context.c |    4 ++
>   src/mesa/main/version.c |  104 ++++++++++++++++++++++++++++++++++++++++++-----
>   src/mesa/main/version.h |    3 ++
>   4 files changed, 108 insertions(+), 14 deletions(-)
>
> diff --git a/docs/envvars.html b/docs/envvars.html
> index 89f7173..a42018e 100644
> --- a/docs/envvars.html
> +++ b/docs/envvars.html
> @@ -62,9 +62,14 @@ 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.
> +glGetString(GL_VERSION) and/or the GL API type.
> +<ul>
> +<li>  The format should be [MAJOR.MINOR][CORE|COMPAT]
> +<li>  Some valid examples are: 3.0, CORE, COMPAT, 3.2CORE
> +<li>  3.0 - override the version, but not affect the API type
> +<li>  CORE or COMPAT - override the API type, but not affect the version
> +<li>  3.2CORE - override both the version and the API type
> +</ul>
>   <li>MESA_GLSL_VERSION_OVERRIDE - changes the value returned by
>   glGetString(GL_SHADING_LANGUAGE_VERSION). Valid values are integers, such as
>   "130".  Mesa will not really implement all the features of the given language version
> diff --git a/src/mesa/main/context.c b/src/mesa/main/context.c
> index feddbaa..a31cada 100644
> --- a/src/mesa/main/context.c
> +++ b/src/mesa/main/context.c
> @@ -932,6 +932,10 @@ _mesa_initialize_context(struct gl_context *ctx,
>      ctx->WinSysDrawBuffer = NULL;
>      ctx->WinSysReadBuffer = NULL;
>
> +   if (_mesa_is_desktop_gl(ctx)) {
> +      _mesa_override_gl_version(ctx);
> +   }
> +
>      /* misc one-time initializations */
>      one_time_init(ctx);
>
> diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c
> index 512a9d7..3187e7a 100644
> --- a/src/mesa/main/version.c
> +++ b/src/mesa/main/version.c
> @@ -55,6 +55,98 @@ override_version(struct gl_context *ctx)
>   }
>
>   /**
> + * Scans 'string' to see if it ends with 'ending' and if it
> + * does, 'string' is modified to remove the ending value.
> + */
> +static GLboolean
> +check_for_ending_and_remove(char *string, const char *ending)
> +{
> +   int len1, len2;
> +
> +   len1 = strlen(string);
> +   len2 = strlen(ending);
> +
> +   if (len2>  len1) {
> +      return GL_FALSE;
> +   }
> +
> +   if (strcmp(string + (len1 - len2), ending) == 0) {
> +      string[len1 - len2] = 0;
> +      return GL_TRUE;
> +   } else {
> +      return GL_FALSE;
> +   }
> +}
> +
> +/**
> + * Scans 'string' to see if it ends with 'ending' and if it
> + * does, 'string' is modified to remove the ending value.
> + */

Looks like that comment is a copy&paste from above.

> +static GLboolean
> +create_gl_version_string(struct gl_context *ctx)
> +{
> +   static const int max = 100;
> +
> +   ctx->VersionString = (char *) malloc(max);
> +   if (ctx->VersionString) {
> +      _mesa_snprintf(ctx->VersionString, max,
> +		     "%u.%u Mesa " MESA_VERSION_STRING
> +#ifdef MESA_GIT_SHA1
> +		     " (" MESA_GIT_SHA1 ")"
> +#endif
> +		     ,
> +		     _mesa_get_version_major(ctx), _mesa_get_version_minor(ctx));
> +   }
> +}
> +
> +/**
> + * Override the context's version and/or API type if the
> + * environment variable MESA_GL_VERSION_OVERRIDE is set.
> + *
> + * Example uses of MESA_GL_VERSION_OVERRIDE:
> + *
> + * 3.0: Override version to 3.0, but don't change API type
> + * COMPAT: Override API type to API_OPENGL, but don't change the version
> + * CORE: Override API type to API_OPENGL_CORE, but don't change the version
> + * 3.2CORE: Override API type to API_OPENGL_CORE, and the version to 3.2
> + */
> +void
> +_mesa_override_gl_version(struct gl_context *ctx)
> +{
> +   const char *env_var = "MESA_GL_VERSION_OVERRIDE";
> +   const char *version;
> +   char *version_dup;
> +   int n;
> +   int major, minor;
> +
> +   version = getenv(env_var);
> +   if (!version) {
> +      return;
> +   }
> +
> +   version_dup = strdup(version);
> +   assert (version != NULL);
> +
> +   if (check_for_ending_and_remove(version_dup, "CORE")) {
> +      ctx->API = API_OPENGL_CORE;
> +   } else if (check_for_ending_and_remove(version_dup, "COMPAT")) {
> +      ctx->API = API_OPENGL;
> +   }
> +
> +   if (version_dup[0] != 0) {
> +      n = sscanf(version, "%u.%u",&major,&minor);
> +      if (n != 2) {
> +         fprintf(stderr, "error: invalid value for %s: %s\n", env_var, version);
> +      } else {
> +         _mesa_set_version(ctx, major, minor);
> +         create_gl_version_string(ctx);
> +      }
> +   }
> +
> +   free(version_dup);
> +}
> +
> +/**
>    * 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".
> @@ -85,7 +177,6 @@ static void
>   compute_version(struct gl_context *ctx)
>   {
>      GLuint major, minor;
> -   static const int max = 100;
>
>      const GLboolean ver_1_3 = (ctx->Extensions.ARB_texture_border_clamp&&
>                                 ctx->Extensions.ARB_texture_cube_map&&
> @@ -224,16 +315,7 @@ compute_version(struct gl_context *ctx)
>
>      override_version(ctx);
>
> -   ctx->VersionString = (char *) malloc(max);
> -   if (ctx->VersionString) {
> -      _mesa_snprintf(ctx->VersionString, max,
> -		     "%u.%u Mesa " MESA_VERSION_STRING
> -#ifdef MESA_GIT_SHA1
> -		     " (" MESA_GIT_SHA1 ")"
> -#endif
> -		     ,
> -		     major, minor);
> -   }
> +   create_gl_version_string(ctx);
>   }
>
>   static void
> diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h
> index d60cde6..992bb74 100644
> --- a/src/mesa/main/version.h
> +++ b/src/mesa/main/version.h
> @@ -51,6 +51,9 @@ extern void
>   _mesa_compute_version(struct gl_context *ctx);
>
>   extern void
> +_mesa_override_gl_version(struct gl_context *ctx);
> +
> +extern void
>   _mesa_override_glsl_version(struct gl_context *ctx);
>
>   /**


Reviewed-by: Brian Paul <brianp at vmware.com>


More information about the mesa-dev mailing list