Change the format to [MAJOR.MINOR][CORE|COMPAT] For example: 3.0, CORE, COMPAT, 3.2CORE
Signed-off-by: Jordan Justen <jordan.l.jus...@intel.com> Reviewed-by: Brian Paul <bri...@vmware.com> --- v2: * Remove override_version function * Fix comment on create_version_string header docs/envvars.html | 11 +++++-- src/mesa/main/context.c | 4 +++ src/mesa/main/version.c | 82 +++++++++++++++++++++++++++++++++++------------ src/mesa/main/version.h | 3 ++ 4 files changed, 77 insertions(+), 23 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 7002dd8..ff8d03c 100644 --- a/src/mesa/main/version.c +++ b/src/mesa/main/version.c @@ -28,30 +28,27 @@ #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". + * Scans 'string' to see if it ends with 'ending' and if it + * does, 'string' is modified to remove the ending value. */ -static void -override_version(struct gl_context *ctx) +static GLboolean +check_for_ending_and_remove(char *string, const char *ending) { - const char *env_var = "MESA_GL_VERSION_OVERRIDE"; - const char *version; - int n; - int major, minor; + int len1, len2; - version = getenv(env_var); - if (!version) { - return; - } + len1 = strlen(string); + len2 = strlen(ending); - n = sscanf(version, "%u.%u", &major, &minor); - if (n != 2) { - fprintf(stderr, "error: invalid value for %s: %s\n", env_var, version); - return; + if (len2 > len1) { + return GL_FALSE; } - ctx->Version = major * 10 + minor; + if (strcmp(string + (len1 - len2), ending) == 0) { + string[len1 - len2] = 0; + return GL_TRUE; + } else { + return GL_FALSE; + } } /** @@ -76,6 +73,53 @@ create_version_string(struct gl_context *ctx, const char *prefix) } /** + * 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 { + ctx->Version = major * 10 + minor; + create_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". @@ -242,8 +286,6 @@ compute_version(struct gl_context *ctx) ctx->Version = major * 10 + minor; - override_version(ctx); - create_version_string(ctx, ""); } diff --git a/src/mesa/main/version.h b/src/mesa/main/version.h index 5b2e85a..2209c87 100644 --- a/src/mesa/main/version.h +++ b/src/mesa/main/version.h @@ -46,6 +46,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); #endif /* VERSION_H */ -- 1.7.9.5 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev