mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 09:08:10 +02:00
glsl: add extra pp tokens workaround and enable for CoR
The CTS now tests to make sure these are not allowed. However, previously drivers (including Mesa) would allow them to exist and just issue a warning. Some old applications such as Champions of Regnum seem to depend on this. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/422 Fixes:43047384c3("glsl/glcpp: Promote "extra token at end of directive" from warning to error") Reviewed-by: Marek Olšák <marek.olsak@amd.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7361> (cherry picked from commita09717c4de) Conflicts: src/gallium/auxiliary/pipe-loader/driinfo_gallium.h src/mesa/drivers/dri/i965/intel_screen.c
This commit is contained in:
parent
889f43c3f1
commit
f06c466895
10 changed files with 29 additions and 2 deletions
|
|
@ -6367,7 +6367,7 @@
|
|||
"description": "glsl: add extra pp tokens workaround and enable for CoR",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"master_sha": null,
|
||||
"because_sha": "43047384c331a9240339563704fe5d97ebe599d7"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -781,7 +781,10 @@ replacement_list:
|
|||
junk:
|
||||
/* empty */
|
||||
| pp_tokens {
|
||||
glcpp_error(&@1, parser, "extra tokens at end of directive");
|
||||
if (parser->gl_ctx->Const.AllowExtraPPTokens)
|
||||
glcpp_warning(&@1, parser, "extra tokens at end of directive");
|
||||
else
|
||||
glcpp_error(&@1, parser, "extra tokens at end of directive");
|
||||
}
|
||||
;
|
||||
|
||||
|
|
|
|||
|
|
@ -22,6 +22,7 @@ DRI_CONF_SECTION_DEBUG
|
|||
DRI_CONF_DISABLE_BLEND_FUNC_EXTENDED("false")
|
||||
DRI_CONF_DISABLE_ARB_GPU_SHADER5("false")
|
||||
DRI_CONF_FORCE_GLSL_VERSION(0)
|
||||
DRI_CONF_ALLOW_EXTRA_PP_TOKENS("false")
|
||||
DRI_CONF_ALLOW_GLSL_EXTENSION_DIRECTIVE_MIDSHADER("false")
|
||||
DRI_CONF_ALLOW_GLSL_120_SUBSET_IN_110("false")
|
||||
DRI_CONF_ALLOW_GLSL_BUILTIN_CONST_EXPRESSION("false")
|
||||
|
|
|
|||
|
|
@ -73,6 +73,8 @@ dri_fill_st_options(struct dri_screen *screen)
|
|||
driQueryOptionb(optionCache, "force_glsl_extensions_warn");
|
||||
options->force_glsl_version =
|
||||
driQueryOptioni(optionCache, "force_glsl_version");
|
||||
options->allow_extra_pp_tokens =
|
||||
driQueryOptionb(optionCache, "allow_extra_pp_tokens");
|
||||
options->allow_glsl_extension_directive_midshader =
|
||||
driQueryOptionb(optionCache, "allow_glsl_extension_directive_midshader");
|
||||
options->allow_glsl_120_subset_in_110 =
|
||||
|
|
|
|||
|
|
@ -220,6 +220,7 @@ struct st_config_options
|
|||
bool disable_arb_gpu_shader5;
|
||||
bool force_glsl_extensions_warn;
|
||||
unsigned force_glsl_version;
|
||||
bool allow_extra_pp_tokens;
|
||||
bool allow_glsl_extension_directive_midshader;
|
||||
bool allow_glsl_120_subset_in_110;
|
||||
bool allow_glsl_builtin_const_expression;
|
||||
|
|
|
|||
|
|
@ -84,6 +84,7 @@ DRI_CONF_BEGIN
|
|||
DRI_CONF_FORCE_GLSL_VERSION(0)
|
||||
DRI_CONF_DISABLE_GLSL_LINE_CONTINUATIONS("false")
|
||||
DRI_CONF_DISABLE_BLEND_FUNC_EXTENDED("false")
|
||||
DRI_CONF_ALLOW_EXTRA_PP_TOKENS("false")
|
||||
DRI_CONF_DUAL_COLOR_BLEND_BY_LOCATION("false")
|
||||
DRI_CONF_ALLOW_GLSL_EXTENSION_DIRECTIVE_MIDSHADER("false")
|
||||
DRI_CONF_ALLOW_GLSL_BUILTIN_VARIABLE_REDECLARATION("false")
|
||||
|
|
|
|||
|
|
@ -3875,6 +3875,14 @@ struct gl_constants
|
|||
*/
|
||||
GLboolean AllowLayoutQualifiersOnFunctionParameters;
|
||||
|
||||
/**
|
||||
* Allow extra tokens at end of preprocessor directives. The CTS now tests
|
||||
* to make sure these are not allowed. However, previously drivers would
|
||||
* allow them to exist and just issue a warning so some old applications
|
||||
* depend on this.
|
||||
*/
|
||||
GLboolean AllowExtraPPTokens;
|
||||
|
||||
/**
|
||||
* Force computing the absolute value for sqrt() and inversesqrt() to follow
|
||||
* D3D9 when apps rely on this behaviour.
|
||||
|
|
|
|||
|
|
@ -1124,6 +1124,8 @@ void st_init_extensions(struct pipe_screen *screen,
|
|||
consts->ForceGLSLVersion = options->force_glsl_version;
|
||||
}
|
||||
|
||||
consts->AllowExtraPPTokens = options->allow_extra_pp_tokens;
|
||||
|
||||
consts->AllowHigherCompatVersion = options->allow_higher_compat_version;
|
||||
|
||||
consts->ForceGLSLAbsSqrt = options->force_glsl_abs_sqrt;
|
||||
|
|
|
|||
|
|
@ -246,6 +246,10 @@ TODO: document the other workarounds.
|
|||
<option name="allow_glsl_layout_qualifier_on_function_parameters" value="true" />
|
||||
</application>
|
||||
|
||||
<application name="Champions of Regnum" executable="game">
|
||||
<option name="allow_extra_pp_tokens" value="true" />
|
||||
</application>
|
||||
|
||||
<application name="Wolfenstein The Old Blood" executable="WolfOldBlood_x64.exe">
|
||||
<option name="force_compat_profile" value="true" />
|
||||
</application>
|
||||
|
|
|
|||
|
|
@ -157,6 +157,11 @@ DRI_CONF_OPT_BEGIN_V(force_glsl_version, int, def, "0:999") \
|
|||
DRI_CONF_DESC("Force a default GLSL version for shaders that lack an explicit #version line") \
|
||||
DRI_CONF_OPT_END
|
||||
|
||||
#define DRI_CONF_ALLOW_EXTRA_PP_TOKENS(def) \
|
||||
DRI_CONF_OPT_BEGIN_B(allow_extra_pp_tokens, def) \
|
||||
DRI_CONF_DESC("Allow extra tokens at end of preprocessor directives.") \
|
||||
DRI_CONF_OPT_END
|
||||
|
||||
#define DRI_CONF_ALLOW_GLSL_EXTENSION_DIRECTIVE_MIDSHADER(def) \
|
||||
DRI_CONF_OPT_BEGIN_B(allow_glsl_extension_directive_midshader, def) \
|
||||
DRI_CONF_DESC("Allow GLSL #extension directives in the middle of shaders") \
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue