v2:
- Provide a correct explanation on the envvars documentation (Ian).
- Provide a more correct explanation on the function comments (Andres).
v3:
- Homogenize documentation and inline comments (Emil).
- Correct a typo (Emil).
Fixes: 2599b92eb9
("mesa: allow forcing >=3.1 compatibility contexts
with MESA_GL_VERSION_OVERRIDE")
Cc: Jordan Justen <jordan.l.justen@intel.com>
Cc: Ian Romanick <ian.d.romanick@intel.com>
Cc: Eric Engestrom <eric.engestrom@imgtec.com>
Cc: Emil Velikov <emil.velikov@collabora.com>
Reviewed-by: Emil Velikov <emil.velikov@collabora.com>
tags/18.1-branchpoint
@@ -88,22 +88,40 @@ This is a work-around for that. | |||
<li>MESA_GL_VERSION_OVERRIDE - changes the value returned by | |||
glGetString(GL_VERSION) and possibly the GL API type. | |||
<ul> | |||
<li> The format should be MAJOR.MINOR[FC] | |||
<li> FC is an optional suffix that indicates a forward compatible context. | |||
This is only valid for versions >= 3.0. | |||
<li> GL versions < 3.0 are set to a compatibility (non-Core) profile | |||
<li> GL versions = 3.0, see below | |||
<li> GL versions > 3.0 are set to a Core profile | |||
<li> Examples: 2.1, 3.0, 3.0FC, 3.1, 3.1FC | |||
<ul> | |||
<li> 2.1 - select a compatibility (non-Core) profile with GL version 2.1 | |||
<li> 3.0 - select a compatibility (non-Core) profile with GL version 3.0 | |||
<li> 3.0FC - select a Core+Forward Compatible profile with GL version 3.0 | |||
<li> 3.1 - select a Core profile with GL version 3.1 | |||
<li> 3.1FC - select a Core+Forward Compatible profile with GL version 3.1 | |||
</ul> | |||
<li> Mesa may not really implement all the features of the given version. | |||
(for developers only) | |||
<li>The format should be MAJOR.MINOR[FC|COMPAT] | |||
<li>FC is an optional suffix that indicates a forward compatible | |||
context. This is only valid for versions >= 3.0. | |||
<li>COMPAT is an optional suffix that indicates a compatibility | |||
context or GL_ARB_compatibility support. This is only valid for | |||
versions >= 3.1. | |||
<li>GL versions <= 3.0 are set to a compatibility (non-Core) | |||
profile | |||
<li>GL versions = 3.1, depending on the driver, it may or may not | |||
have the ARB_compatibility extension enabled. | |||
<li>GL versions >= 3.2 are set to a Core profile | |||
<li>Examples: 2.1, 3.0, 3.0FC, 3.1, 3.1FC, 3.1COMPAT, X.Y, X.YFC, | |||
X.YCOMPAT. | |||
<ul> | |||
<li>2.1 - select a compatibility (non-Core) profile with GL | |||
version 2.1. | |||
<li>3.0 - select a compatibility (non-Core) profile with GL | |||
version 3.0. | |||
<li>3.0FC - select a Core+Forward Compatible profile with GL | |||
version 3.0. | |||
<li>3.1 - select GL version 3.1 with GL_ARB_compatibility enabled | |||
per the driver default. | |||
<li>3.1FC - select GL version 3.1 with forward compatibility and | |||
GL_ARB_compatibility disabled. | |||
<li>3.1COMPAT - select GL version 3.1 with GL_ARB_compatibility | |||
enabled. | |||
<li>X.Y - override GL version to X.Y without changing the profile. | |||
<li>X.YFC - select a Core+Forward Compatible profile with GL | |||
version X.Y. | |||
<li>X.YCOMPAT - select a Compatibility profile with GL version | |||
X.Y. | |||
</ul> | |||
<li>Mesa may not really implement all the features of the given | |||
version. (for developers only) | |||
</ul> | |||
<li>MESA_GLES_VERSION_OVERRIDE - changes the value returned by | |||
glGetString(GL_VERSION) for OpenGL ES. |
@@ -139,11 +139,15 @@ create_version_string(struct gl_context *ctx, const char *prefix) | |||
* | |||
* Example uses of MESA_GL_VERSION_OVERRIDE: | |||
* | |||
* 2.1: select a compatibility (non-Core) profile with GL version 2.1 | |||
* 3.0: select a compatibility (non-Core) profile with GL version 3.0 | |||
* 3.0FC: select a Core+Forward Compatible profile with GL version 3.0 | |||
* 3.1: select a Core profile with GL version 3.1 | |||
* 3.1FC: select a Core+Forward Compatible profile with GL version 3.1 | |||
* 2.1: select a compatibility (non-Core) profile with GL version 2.1. | |||
* 3.0: select a compatibility (non-Core) profile with GL version 3.0. | |||
* 3.0FC: select a Core+Forward Compatible profile with GL version 3.0. | |||
* 3.1: select GL version 3.1 with GL_ARB_compatibility enabled per the driver default. | |||
* 3.1FC: select GL version 3.1 with forward compatibility and GL_ARB_compatibility disabled. | |||
* 3.1COMPAT: select GL version 3.1 with GL_ARB_compatibility enabled. | |||
* X.Y: override GL version to X.Y without changing the profile. | |||
* X.YFC: select a Core+Forward Compatible profile with GL version X.Y. | |||
* X.YCOMPAT: select a Compatibility profile with GL version X.Y. | |||
*/ | |||
bool | |||
_mesa_override_gl_version_contextless(struct gl_constants *consts, | |||
@@ -157,17 +161,12 @@ _mesa_override_gl_version_contextless(struct gl_constants *consts, | |||
if (version > 0) { | |||
*versionOut = version; | |||
/* If the API is a desktop API, adjust the context flags. We may also | |||
* need to modify the API depending on the version. For example, Mesa | |||
* does not support a GL 3.3 compatibility profile. | |||
*/ | |||
/* Modify the API and context flags as needed. */ | |||
if (*apiOut == API_OPENGL_CORE || *apiOut == API_OPENGL_COMPAT) { | |||
if (version >= 30 && fwd_context) { | |||
*apiOut = API_OPENGL_CORE; | |||
consts->ContextFlags |= GL_CONTEXT_FLAG_FORWARD_COMPATIBLE_BIT; | |||
} else if (version >= 31 && !compat_context) { | |||
*apiOut = API_OPENGL_CORE; | |||
} else { | |||
} else if (compat_context) { | |||
*apiOut = API_OPENGL_COMPAT; | |||
} | |||
} |