mesa: allow forcing >=3.1 compatibility contexts with MESA_GL_VERSION_OVERRIDE
authorMarek Olšák <marek.olsak@amd.com>
Sun, 14 Sep 2014 21:12:06 +0000 (23:12 +0200)
committerMarek Olšák <marek.olsak@amd.com>
Wed, 24 Sep 2014 12:48:01 +0000 (14:48 +0200)
E.g. the 4.0 compatibility profile can be forced with:

MESA_GL_VERSION_OVERRIDE=4.0COMPAT

Some tests that I have require 4.0 compatibility.

Reviewed-by: Brian Paul <brianp@vmware.com>
src/mesa/main/version.c

index 4dea530cd0f4c26a11e2082a353e730d41d27ff0..71f70119ba6c6e2f8688f888032b15446ebb8241 100644 (file)
@@ -57,13 +57,15 @@ check_for_ending(const char *string, const char *ending)
  * fwd_context is only valid if version > 0
  */
 static void
-get_gl_override(int *version, GLboolean *fwd_context)
+get_gl_override(int *version, GLboolean *fwd_context,
+                GLboolean *compat_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;
+   static GLboolean compat_suffix = GL_FALSE;
 
    if (override_version < 0) {
       override_version = 0;
@@ -71,6 +73,7 @@ get_gl_override(int *version, GLboolean *fwd_context)
       version_str = getenv(env_var);
       if (version_str) {
          fc_suffix = check_for_ending(version_str, "FC");
+         compat_suffix = check_for_ending(version_str, "COMPAT");
 
          n = sscanf(version_str, "%u.%u", &major, &minor);
          if (n != 2) {
@@ -87,6 +90,7 @@ get_gl_override(int *version, GLboolean *fwd_context)
 
    *version = override_version;
    *fwd_context = fc_suffix;
+   *compat_context = compat_suffix;
 }
 
 /**
@@ -129,16 +133,16 @@ _mesa_override_gl_version_contextless(struct gl_constants *consts,
                                       gl_api *apiOut, GLuint *versionOut)
 {
    int version;
-   GLboolean fwd_context;
+   GLboolean fwd_context, compat_context;
 
-   get_gl_override(&version, &fwd_context);
+   get_gl_override(&version, &fwd_context, &compat_context);
 
    if (version > 0) {
       *versionOut = version;
       if (version >= 30 && fwd_context) {
          *apiOut = API_OPENGL_CORE;
          consts->ContextFlags |= GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT;
-      } else if (version >= 31) {
+      } else if (version >= 31 && !compat_context) {
          *apiOut = API_OPENGL_CORE;
       } else {
          *apiOut = API_OPENGL_COMPAT;
@@ -166,9 +170,9 @@ int
 _mesa_get_gl_version_override(void)
 {
    int version;
-   GLboolean fwd_context;
+   GLboolean fwd_context, compat_context;
 
-   get_gl_override(&version, &fwd_context);
+   get_gl_override(&version, &fwd_context, &compat_context);
 
    return version;
 }