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 <samuel.pitoiset@gmail.com>
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Reviewed-by: Edmondo Tommasina <edmondo.tommasina@gmail.com>
Reviewed-by: Nicolai Hähnle <nicolai.haehnle@amd.com>
This commit is contained in:
Samuel Pitoiset
2017-02-14 16:18:24 +01:00
parent d1fae627fa
commit 9d16f3903e
7 changed files with 25 additions and 2 deletions

View File

@@ -245,6 +245,7 @@ struct st_config_options
unsigned force_glsl_version; unsigned force_glsl_version;
boolean force_s3tc_enable; boolean force_s3tc_enable;
boolean allow_glsl_extension_directive_midshader; boolean allow_glsl_extension_directive_midshader;
boolean allow_higher_compat_version;
boolean glsl_zero_init; boolean glsl_zero_init;
}; };

View File

@@ -70,6 +70,7 @@ const __DRIconfigOptionsExtension gallium_config_options = {
DRI_CONF_DISABLE_SHADER_BIT_ENCODING("false") DRI_CONF_DISABLE_SHADER_BIT_ENCODING("false")
DRI_CONF_FORCE_GLSL_VERSION(0) DRI_CONF_FORCE_GLSL_VERSION(0)
DRI_CONF_ALLOW_GLSL_EXTENSION_DIRECTIVE_MIDSHADER("false") DRI_CONF_ALLOW_GLSL_EXTENSION_DIRECTIVE_MIDSHADER("false")
DRI_CONF_ALLOW_HIGHER_COMPAT_VERSION("false")
DRI_CONF_SECTION_END DRI_CONF_SECTION_END
DRI_CONF_SECTION_MISCELLANEOUS DRI_CONF_SECTION_MISCELLANEOUS
@@ -99,6 +100,8 @@ dri_fill_st_options(struct st_config_options *options,
driQueryOptionb(optionCache, "force_s3tc_enable"); driQueryOptionb(optionCache, "force_s3tc_enable");
options->allow_glsl_extension_directive_midshader = options->allow_glsl_extension_directive_midshader =
driQueryOptionb(optionCache, "allow_glsl_extension_directive_midshader"); driQueryOptionb(optionCache, "allow_glsl_extension_directive_midshader");
options->allow_higher_compat_version =
driQueryOptionb(optionCache, "allow_higher_compat_version");
options->glsl_zero_init = driQueryOptionb(optionCache, "glsl_zero_init"); options->glsl_zero_init = driQueryOptionb(optionCache, "glsl_zero_init");
} }

View File

@@ -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_DESC(en,gettext("Allow GLSL #extension directives in the middle of shaders")) \
DRI_CONF_OPT_END 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
/** /**

View File

@@ -916,6 +916,9 @@ brw_process_driconf_options(struct brw_context *brw)
ctx->Const.AllowGLSLExtensionDirectiveMidShader = ctx->Const.AllowGLSLExtensionDirectiveMidShader =
driQueryOptionb(options, "allow_glsl_extension_directive_midshader"); driQueryOptionb(options, "allow_glsl_extension_directive_midshader");
ctx->Const.AllowHigherCompatVersion =
driQueryOptionb(options, "allow_higher_compat_version");
ctx->Const.GLSLZeroInit = driQueryOptionb(options, "glsl_zero_init"); ctx->Const.GLSLZeroInit = driQueryOptionb(options, "glsl_zero_init");
brw->dual_color_blend_by_location = brw->dual_color_blend_by_location =

View File

@@ -3500,6 +3500,13 @@ struct gl_constants
*/ */
GLboolean AllowGLSLExtensionDirectiveMidShader; 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. * Force uninitialized variables to default to zero.
*/ */

View File

@@ -566,8 +566,10 @@ _mesa_get_version(const struct gl_extensions *extensions,
case API_OPENGL_COMPAT: case API_OPENGL_COMPAT:
/* Disable GLSL 1.40 and later for legacy contexts. /* Disable GLSL 1.40 and later for legacy contexts.
* This disallows creation of the GL 3.1 compatibility context. */ * This disallows creation of the GL 3.1 compatibility context. */
if (consts->GLSLVersion > 130) { if (!consts->AllowHigherCompatVersion) {
consts->GLSLVersion = 130; if (consts->GLSLVersion > 130) {
consts->GLSLVersion = 130;
}
} }
/* fall through */ /* fall through */
case API_OPENGL_CORE: case API_OPENGL_CORE:

View File

@@ -879,6 +879,8 @@ void st_init_extensions(struct pipe_screen *screen,
consts->ForceGLSLVersion = options->force_glsl_version; consts->ForceGLSLVersion = options->force_glsl_version;
} }
consts->AllowHigherCompatVersion = options->allow_higher_compat_version;
if (consts->GLSLVersion >= 400) if (consts->GLSLVersion >= 400)
extensions->ARB_gpu_shader5 = GL_TRUE; extensions->ARB_gpu_shader5 = GL_TRUE;
if (consts->GLSLVersion >= 410) if (consts->GLSLVersion >= 410)