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:
@@ -245,6 +245,7 @@ struct st_config_options
|
||||
unsigned force_glsl_version;
|
||||
boolean force_s3tc_enable;
|
||||
boolean allow_glsl_extension_directive_midshader;
|
||||
boolean allow_higher_compat_version;
|
||||
boolean glsl_zero_init;
|
||||
};
|
||||
|
||||
|
@@ -70,6 +70,7 @@ const __DRIconfigOptionsExtension gallium_config_options = {
|
||||
DRI_CONF_DISABLE_SHADER_BIT_ENCODING("false")
|
||||
DRI_CONF_FORCE_GLSL_VERSION(0)
|
||||
DRI_CONF_ALLOW_GLSL_EXTENSION_DIRECTIVE_MIDSHADER("false")
|
||||
DRI_CONF_ALLOW_HIGHER_COMPAT_VERSION("false")
|
||||
DRI_CONF_SECTION_END
|
||||
|
||||
DRI_CONF_SECTION_MISCELLANEOUS
|
||||
@@ -99,6 +100,8 @@ dri_fill_st_options(struct st_config_options *options,
|
||||
driQueryOptionb(optionCache, "force_s3tc_enable");
|
||||
options->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");
|
||||
}
|
||||
|
||||
|
@@ -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
|
||||
|
||||
|
||||
|
||||
/**
|
||||
|
@@ -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 =
|
||||
|
@@ -3500,6 +3500,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.
|
||||
*/
|
||||
|
@@ -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:
|
||||
|
@@ -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)
|
||||
|
Reference in New Issue
Block a user