mesa: Allow overriding GLSL version with environment variable
authorChad Versace <chad@chad-versace.us>
Tue, 27 Sep 2011 20:53:11 +0000 (13:53 -0700)
committerChad Versace <chad@chad-versace.us>
Wed, 28 Sep 2011 18:29:52 +0000 (11:29 -0700)
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".

MESA_GLSL_VERSION_OVERRIDE has the same behavior as INTEL_GLSL_VERSION,
except that it applies to all drivers, not just Intel's. Since the former
supercedes the latter, this patch disables the latter.

Reviewed-by: Dave Airlie <airlied@gmail.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Signed-off-by: Chad Versace <chad@chad-versace.us>
docs/envvars.html
src/mesa/drivers/dri/intel/intel_extensions.c
src/mesa/drivers/dri/r600/r600_context.c
src/mesa/main/context.c
src/mesa/main/version.c
src/mesa/main/version.h
src/mesa/state_tracker/st_extensions.c

index 6402ec507277dd421e86774fbacb07b19fc87f01..8c5c6abf74c4371736cb54460ec7b0b0ed58cba7 100644 (file)
@@ -62,6 +62,10 @@ This is a work-around for that.
 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.
+<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
+if it's higher than what's normally reported. (for developers only)
 <li>MESA_GLSL - <a href="shading.html#envvars">shading language compiler options</a>
 </ul>
 
index 6ccd5b3ba97c3a94ccd8feb8b87a1c2df541f489..e9a36eb4f803343662e619d5a9d6fdba583098a4 100644 (file)
@@ -112,7 +112,8 @@ intelInitExtensions(struct gl_context *ctx)
    ctx->Extensions.OES_EGL_image = true;
 #endif
 
-   ctx->Const.GLSLVersion = get_glsl_version();
+   ctx->Const.GLSLVersion = 120;
+   _mesa_override_glsl_version(ctx);
 
    if (intel->gen >= 5)
       ctx->Extensions.EXT_timer_query = true;
index 247d55101560056a9b97e1a01f841bc5031804f6..3e296efdb6d12064fd12f032a6f4b2dce2ae85a0 100644 (file)
@@ -173,6 +173,7 @@ static void r600InitConstValues(struct gl_context *ctx, radeonScreenPtr screen)
     }
 
         ctx->Const.GLSLVersion = 120;
+        _mesa_override_glsl_version(ctx);
 
        ctx->Const.MaxTextureImageUnits = 16;
        /* 8 per clause on r6xx, 16 on r7xx
index b20063c33b283d41366faf2f061cf72a59b7f627..2532c47de15bae4aa64975eb2ecd4ac9862a9dae 100644 (file)
@@ -627,6 +627,7 @@ _mesa_init_constants(struct gl_context *ctx)
    /* Shading language version */
    if (ctx->API == API_OPENGL) {
       ctx->Const.GLSLVersion = 120;
+      _mesa_override_glsl_version(ctx);
    }
    else if (ctx->API == API_OPENGLES2) {
       ctx->Const.GLSLVersion = 100;
index 00b423cd47935ea9eb81ffc834d2decb53d245dc..665b0e7ad28af5e79a57ea87bf88b543aae9d3f9 100644 (file)
@@ -51,6 +51,30 @@ override_version(struct gl_context *ctx, GLuint *major, GLuint *minor)
    }
 }
 
+/**
+ * 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".
+ */
+void
+_mesa_override_glsl_version(struct gl_context *ctx)
+{
+   const char *env_var = "MESA_GLSL_VERSION_OVERRIDE";
+   const char *version;
+   int n;
+
+   version = getenv(env_var);
+   if (!version) {
+      return;
+   }
+
+   n = sscanf(version, "%d", &ctx->Const.GLSLVersion);
+   if (n != 1) {
+      fprintf(stderr, "error: invalid value for %s: %s\n", env_var, version);
+      return;
+   }
+}
+
 /**
  * Examine enabled GL extensions to determine GL version.
  * Return major and minor version numbers.
index 0a0512c339d4c6e574e661258b3b6a4e1bdc8c44..32e141f0e0e048847d472cd5435acd98149471ff 100644 (file)
@@ -56,5 +56,7 @@ struct gl_context;
 extern void
 _mesa_compute_version(struct gl_context *ctx);
 
+extern void
+_mesa_override_glsl_version(struct gl_context *ctx);
 
 #endif /* VERSION_H */
index ef284ad70c392db4dec8b4d3f21adce074363dea..5506db6c4e9b0a8f57d6803703a55a99da812a72 100644 (file)
@@ -216,6 +216,7 @@ void st_init_limits(struct st_context *st)
       c->MaxProgramTexelOffset = screen->get_param(screen, PIPE_CAP_MAX_TEXEL_OFFSET);
 
       c->GLSLVersion = 120;
+      _mesa_override_glsl_version(c);
       c->UniformBooleanTrue = ~0;
    }
 }