diff options
Diffstat (limited to 'mesalib/src/mesa/main/version.c')
-rw-r--r-- | mesalib/src/mesa/main/version.c | 94 |
1 files changed, 67 insertions, 27 deletions
diff --git a/mesalib/src/mesa/main/version.c b/mesalib/src/mesa/main/version.c index e944a5518..c90318981 100644 --- a/mesalib/src/mesa/main/version.c +++ b/mesalib/src/mesa/main/version.c @@ -50,6 +50,45 @@ check_for_ending(const char *string, const char *ending) } /** + * Returns the gl override data + * + * version > 0 indicates there is an override requested + * fwd_context is only valid if version > 0 + */ +static void +get_gl_override(int *version, GLboolean *fwd_context) +{ + const char *env_var = "MESA_GL_VERSION_OVERRIDE"; + const char *version_str; + int major, minor, n; + static int override_version = -1; + static GLboolean fc_suffix = GL_FALSE; + + if (override_version < 0) { + override_version = 0; + + version_str = getenv(env_var); + if (version_str) { + fc_suffix = check_for_ending(version_str, "FC"); + + n = sscanf(version_str, "%u.%u", &major, &minor); + if (n != 2) { + fprintf(stderr, "error: invalid value for %s: %s\n", env_var, version_str); + override_version = 0; + } else { + override_version = major * 10 + minor; + if (override_version < 30 && fc_suffix) { + fprintf(stderr, "error: invalid value for %s: %s\n", env_var, version_str); + } + } + } + } + + *version = override_version; + *fwd_context = fc_suffix; +} + +/** * Builds the MESA version string. */ static void @@ -87,41 +126,42 @@ create_version_string(struct gl_context *ctx, const char *prefix) void _mesa_override_gl_version(struct gl_context *ctx) { - const char *env_var = "MESA_GL_VERSION_OVERRIDE"; - const char *version; - int n; - int major, minor; - GLboolean fc_suffix; + int version; + GLboolean fwd_context; - version = getenv(env_var); - if (!version) { - return; - } + get_gl_override(&version, &fwd_context); - fc_suffix = check_for_ending(version, "FC"); - - 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; - if (ctx->Version < 30 && fc_suffix) { - fprintf(stderr, "error: invalid value for %s: %s\n", env_var, version); + if (version > 0) { + ctx->Version = version; + if (version >= 30 && fwd_context) { + ctx->API = API_OPENGL_CORE; + ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT; + } else if (version >= 31) { + ctx->API = API_OPENGL_CORE; } else { - if (ctx->Version >= 30 && fc_suffix) { - ctx->API = API_OPENGL_CORE; - ctx->Const.ContextFlags |= GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT; - } else if (ctx->Version >= 31) { - ctx->API = API_OPENGL_CORE; - } else { - ctx->API = API_OPENGL_COMPAT; - } - create_version_string(ctx, ""); + ctx->API = API_OPENGL_COMPAT; } + create_version_string(ctx, ""); } } /** + * Returns the gl override value + * + * version > 0 indicates there is an override requested + */ +int +_mesa_get_gl_version_override(void) +{ + int version; + GLboolean fwd_context; + + get_gl_override(&version, &fwd_context); + + return version; +} + +/** * 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". |