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:
@@ -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);
|
||||
|
@@ -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")
|
||||
|
@@ -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;
|
||||
|
@@ -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 =
|
||||
|
@@ -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
|
||||
*/
|
||||
|
@@ -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);
|
||||
|
||||
|
@@ -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")) \
|
||||
|
Reference in New Issue
Block a user