[Mesa-dev] [PATCH] mesa: Allow override of GL version with environment variables
Chad Versace
chad at chad-versace.us
Mon Sep 26 12:05:42 PDT 2011
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;
+ }
+ 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);
+
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.");
}
--
1.7.6.2
More information about the mesa-dev
mailing list