mesa/util: add allow_glsl_builtin_const_expression driconf override

Google Earth VR shaders uses builtins in constant expressions with
GLSL 1.10. That feature wasn't allowed until GLSL 1.20.

Reviewed-by: Dave Airlie <airlied@redhat.com>
This commit is contained in:
Timothy Arceri
2018-06-14 11:00:22 +10:00
parent de93f546a7
commit 90dbab0f9a
7 changed files with 20 additions and 1 deletions

View File

@@ -529,7 +529,8 @@ generate_call(exec_list *instructions, ir_function_signature *sig,
* If the function call is a constant expression, don't generate any
* instructions; just generate an ir_constant.
*/
if (state->is_version(120, 100)) {
if (state->is_version(120, 100) ||
state->ctx->Const.AllowGLSLBuiltinConstantExpression) {
ir_constant *value = sig->constant_expression_value(ctx,
actual_parameters,
NULL);

View File

@@ -23,6 +23,7 @@ DRI_CONF_SECTION_DEBUG
DRI_CONF_DISABLE_SHADER_BIT_ENCODING("false")
DRI_CONF_FORCE_GLSL_VERSION(0)
DRI_CONF_ALLOW_GLSL_EXTENSION_DIRECTIVE_MIDSHADER("false")
DRI_CONF_ALLOW_GLSL_BUILTIN_CONST_EXPRESSION("false")
DRI_CONF_ALLOW_GLSL_BUILTIN_VARIABLE_REDECLARATION("false")
DRI_CONF_ALLOW_GLSL_CROSS_STAGE_INTERPOLATION_MISMATCH("false")
DRI_CONF_ALLOW_HIGHER_COMPAT_VERSION("false")

View File

@@ -222,6 +222,7 @@ struct st_config_options
boolean force_glsl_extensions_warn;
unsigned force_glsl_version;
boolean allow_glsl_extension_directive_midshader;
boolean allow_glsl_builtin_const_expression;
boolean allow_glsl_builtin_variable_redeclaration;
boolean allow_higher_compat_version;
boolean glsl_zero_init;

View File

@@ -74,6 +74,8 @@ dri_fill_st_options(struct dri_screen *screen)
driQueryOptioni(optionCache, "force_glsl_version");
options->allow_glsl_extension_directive_midshader =
driQueryOptionb(optionCache, "allow_glsl_extension_directive_midshader");
options->allow_glsl_builtin_const_expression =
driQueryOptionb(optionCache, "allow_glsl_builtin_const_expression");
options->allow_glsl_builtin_variable_redeclaration =
driQueryOptionb(optionCache, "allow_glsl_builtin_variable_redeclaration");
options->allow_higher_compat_version =

View File

@@ -3721,6 +3721,12 @@ struct gl_constants
*/
GLboolean AllowGLSLExtensionDirectiveMidShader;
/**
* Allow builtins as part of constant expressions. This was not allowed
* until GLSL 1.20 this allows it everywhere.
*/
GLboolean AllowGLSLBuiltinConstantExpression;
/**
* Allow GLSL built-in variables to be redeclared verbatim
*/

View File

@@ -1134,6 +1134,9 @@ void st_init_extensions(struct pipe_screen *screen,
if (options->allow_glsl_extension_directive_midshader)
consts->AllowGLSLExtensionDirectiveMidShader = GL_TRUE;
if (options->allow_glsl_builtin_const_expression)
consts->AllowGLSLBuiltinConstantExpression = GL_TRUE;
consts->MinMapBufferAlignment =
screen->get_param(screen, PIPE_CAP_MIN_MAP_BUFFER_ALIGNMENT);

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_OPT_END
#define DRI_CONF_ALLOW_GLSL_BUILTIN_CONST_EXPRESSION(def) \
DRI_CONF_OPT_BEGIN_B(allow_glsl_builtin_const_expression, def) \
DRI_CONF_DESC(en,gettext("Allow builtins as part of constant expressions")) \
DRI_CONF_OPT_END
#define DRI_CONF_ALLOW_GLSL_BUILTIN_VARIABLE_REDECLARATION(def) \
DRI_CONF_OPT_BEGIN_B(allow_glsl_builtin_variable_redeclaration, def) \
DRI_CONF_DESC(en,gettext("Allow GLSL built-in variables to be redeclared verbatim")) \