Currently, `allow_higher_compat_version` is only used during context
creation. Doing that means an application that doesn't request a
specific version can be given a version higher than 3.0.
However, an application still cannot request a higher version via
glXCreateContextAttribsARB. The GLX and DRI layers will only see that
version 3.0 is supported, so context creation will fail before the drive
is called. For this to work, max_gl_compat_version must be set to a
higher version.
This enables running many piglit tests on i965 with
allow_higher_compat_version.
v2: Fix a typo in a comment. Noticed by Tim. Fix a typo in the commit
message. Noticed by the spell checker. :)
v3: Don't parse driconf again. Suggested by Tim.
Reviewed-by: Timothy Arceri <tarceri@itsqueeze.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7387>
_mesa_override_extensions(ctx);
_mesa_compute_version(ctx);
+#ifndef NDEBUG
+ /* Enforce that the version of the context that was created is at least as
+ * high as the version that was advertised via GLX / EGL / whatever window
+ * system.
+ */
+ const __DRIscreen *const dri_screen = brw->screen->driScrnPriv;
+
+ switch (api) {
+ case API_OPENGL_COMPAT:
+ assert(ctx->Version >= dri_screen->max_gl_compat_version);
+ break;
+ case API_OPENGLES:
+ assert(ctx->Version >= dri_screen->max_gl_es1_version);
+ break;
+ case API_OPENGLES2:
+ assert(ctx->Version >= dri_screen->max_gl_es2_version);
+ break;
+ case API_OPENGL_CORE:
+ assert(ctx->Version >= dri_screen->max_gl_core_version);
+ break;
+ }
+#endif
+
/* GL_ARB_gl_spirv */
if (ctx->Extensions.ARB_gl_spirv) {
brw_initialize_spirv_supported_capabilities(brw);
dri_screen->max_gl_compat_version =
MIN2(32, dri_screen->max_gl_compat_version);
}
+
+ /* Using the `allow_higher_compat_version` option during context creation
+ * means that an application that doesn't request a specific version can be
+ * given a version higher than 3.0. However, an application still cannot
+ * request a higher version. For that to work, max_gl_compat_version must
+ * be set.
+ */
+ if (dri_screen->max_gl_compat_version < dri_screen->max_gl_core_version) {
+ if (driQueryOptionb(&screen->optionCache, "allow_higher_compat_version"))
+ dri_screen->max_gl_compat_version = dri_screen->max_gl_core_version;
+ }
}
static void