summaryrefslogtreecommitdiffstats
path: root/src/mesa
diff options
context:
space:
mode:
authorSamuel Pitoiset <[email protected]>2017-02-14 16:18:24 +0100
committerSamuel Pitoiset <[email protected]>2017-02-15 16:15:32 +0100
commit9d16f3903e2caddb7f674ca7ab7b1e96cfffbb2b (patch)
treed04f78fb450fa43802ae5c137f6cd7f6f6095951 /src/mesa
parentd1fae627fa63cf7749d4fb2ebb57ae5b13a7d5ef (diff)
driconf: add allow_higher_compat_version option
Mesa currently doesn't allow to create 3.1+ compatibility profiles mainly because various features are unimplemented and bugs can happen. However, some buggy apps request a compat profile without using any old features unimplemented in mesa, and they fail to start. This option should help some games to run but it's not enough for all (eg. Dying Light). v2: - s/force_compat_profile/allow_higher_compat_version Signed-off-by: Samuel Pitoiset <[email protected]> Reviewed-by: Marek Olšák <[email protected]> Reviewed-by: Edmondo Tommasina <[email protected]> Reviewed-by: Nicolai Hähnle <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r--src/mesa/drivers/dri/common/xmlpool/t_options.h5
-rw-r--r--src/mesa/drivers/dri/i965/brw_context.c3
-rw-r--r--src/mesa/main/mtypes.h7
-rw-r--r--src/mesa/main/version.c6
-rw-r--r--src/mesa/state_tracker/st_extensions.c2
5 files changed, 21 insertions, 2 deletions
diff --git a/src/mesa/drivers/dri/common/xmlpool/t_options.h b/src/mesa/drivers/dri/common/xmlpool/t_options.h
index a189bbedec6..f200093177d 100644
--- a/src/mesa/drivers/dri/common/xmlpool/t_options.h
+++ b/src/mesa/drivers/dri/common/xmlpool/t_options.h
@@ -115,6 +115,11 @@ DRI_CONF_OPT_BEGIN_B(allow_glsl_extension_directive_midshader, def) \
DRI_CONF_DESC(en,gettext("Allow GLSL #extension directives in the middle of shaders")) \
DRI_CONF_OPT_END
+#define DRI_CONF_ALLOW_HIGHER_COMPAT_VERSION(def) \
+DRI_CONF_OPT_BEGIN_B(allow_higher_compat_version, def) \
+ DRI_CONF_DESC(en,gettext("Allow a higher compat profile (version 3.1+) for apps that request it")) \
+DRI_CONF_OPT_END
+
/**
diff --git a/src/mesa/drivers/dri/i965/brw_context.c b/src/mesa/drivers/dri/i965/brw_context.c
index 7240b1f4455..c56a14e3d66 100644
--- a/src/mesa/drivers/dri/i965/brw_context.c
+++ b/src/mesa/drivers/dri/i965/brw_context.c
@@ -916,6 +916,9 @@ brw_process_driconf_options(struct brw_context *brw)
ctx->Const.AllowGLSLExtensionDirectiveMidShader =
driQueryOptionb(options, "allow_glsl_extension_directive_midshader");
+ ctx->Const.AllowHigherCompatVersion =
+ driQueryOptionb(options, "allow_higher_compat_version");
+
ctx->Const.GLSLZeroInit = driQueryOptionb(options, "glsl_zero_init");
brw->dual_color_blend_by_location =
diff --git a/src/mesa/main/mtypes.h b/src/mesa/main/mtypes.h
index a845a394c8f..08bd929255c 100644
--- a/src/mesa/main/mtypes.h
+++ b/src/mesa/main/mtypes.h
@@ -3501,6 +3501,13 @@ struct gl_constants
GLboolean AllowGLSLExtensionDirectiveMidShader;
/**
+ * Allow creating a higher compat profile (version 3.1+) for apps that
+ * request it. Be careful when adding that driconf option because some
+ * features are unimplemented and might not work correctly.
+ */
+ GLboolean AllowHigherCompatVersion;
+
+ /**
* Force uninitialized variables to default to zero.
*/
GLboolean GLSLZeroInit;
diff --git a/src/mesa/main/version.c b/src/mesa/main/version.c
index 85ec9de6122..3d54d21a042 100644
--- a/src/mesa/main/version.c
+++ b/src/mesa/main/version.c
@@ -566,8 +566,10 @@ _mesa_get_version(const struct gl_extensions *extensions,
case API_OPENGL_COMPAT:
/* Disable GLSL 1.40 and later for legacy contexts.
* This disallows creation of the GL 3.1 compatibility context. */
- if (consts->GLSLVersion > 130) {
- consts->GLSLVersion = 130;
+ if (!consts->AllowHigherCompatVersion) {
+ if (consts->GLSLVersion > 130) {
+ consts->GLSLVersion = 130;
+ }
}
/* fall through */
case API_OPENGL_CORE:
diff --git a/src/mesa/state_tracker/st_extensions.c b/src/mesa/state_tracker/st_extensions.c
index 293814e3aec..37fe4469c37 100644
--- a/src/mesa/state_tracker/st_extensions.c
+++ b/src/mesa/state_tracker/st_extensions.c
@@ -879,6 +879,8 @@ void st_init_extensions(struct pipe_screen *screen,
consts->ForceGLSLVersion = options->force_glsl_version;
}
+ consts->AllowHigherCompatVersion = options->allow_higher_compat_version;
+
if (consts->GLSLVersion >= 400)
extensions->ARB_gpu_shader5 = GL_TRUE;
if (consts->GLSLVersion >= 410)