Reviewed-by: Marta Lofstedt <marta.lofst...@intel.com>
> -----Original Message----- > From: mesa-dev [mailto:mesa-dev-boun...@lists.freedesktop.org] On > Behalf Of Ian Romanick > Sent: Wednesday, October 7, 2015 11:34 PM > To: mesa-dev@lists.freedesktop.org > Cc: Romanick, Ian D; 10.6 11.0 > Subject: [Mesa-dev] [PATCH 2/4 v2] glsl: Restrict initializers for global > variables to constant expression in ES > > From: Ian Romanick <ian.d.roman...@intel.com> > > v2: Combine this check with the existing const and uniform checks. This > change depends on the previous patch (glsl: Only set > ir_variable::constant_value for const-decorated variables). > > Fixes: > > ES2-CTS.shaders.negative.initialize > ES3-CTS.shaders.negative.initialize > > spec/glsl-es-1.00/compiler/global-initializer/from-attribute.vert > spec/glsl-es-1.00/compiler/global-initializer/from-uniform.vert > spec/glsl-es-1.00/compiler/global-initializer/from-uniform.frag > spec/glsl-es-1.00/compiler/global-initializer/from-global.vert > spec/glsl-es-1.00/compiler/global-initializer/from-global.frag > spec/glsl-es-1.00/compiler/global-initializer/from-varying.frag > spec/glsl-es-3.00/compiler/global-initializer/from-uniform.vert > spec/glsl-es-3.00/compiler/global-initializer/from-uniform.frag > spec/glsl-es-3.00/compiler/global-initializer/from-in.vert > spec/glsl-es-3.00/compiler/global-initializer/from-in.frag > spec/glsl-es-3.00/compiler/global-initializer/from-global.vert > spec/glsl-es-3.00/compiler/global-initializer/from-global.frag > > Note: spec/glsl-es-3.00/compiler/global-initializer/from-sequence.* > still fail because the result of a sequence operator is still considered to > be a > constant expression. > > Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> > Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=92304 > Reviewed-by: Tapani Pälli <tapani.pa...@intel.com> [v1] > Reviewed-by: Iago Toral Quiroga <ito...@igalia.com> [v1] > Cc: "10.6 11.0" <mesa-sta...@lists.freedesktop.org> > --- > src/glsl/ast_to_hir.cpp | 20 +++++++++++++++++--- > 1 file changed, 17 insertions(+), 3 deletions(-) > > diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp index > e3d4c44..eefc7b7 100644 > --- a/src/glsl/ast_to_hir.cpp > +++ b/src/glsl/ast_to_hir.cpp > @@ -3213,9 +3213,19 @@ process_initializer(ir_variable *var, > ast_declaration *decl, > > /* Calculate the constant value if this is a const or uniform > * declaration. > + * > + * Section 4.3 (Storage Qualifiers) of the GLSL ES 1.00.17 spec says: > + * > + * "Declarations of globals without a storage qualifier, or with > + * just the const qualifier, may include initializers, in which case > + * they will be initialized before the first line of main() is > + * executed. Such initializers must be a constant expression." > + * > + * The same section of the GLSL ES 3.00.4 spec has similar language. > */ > if (type->qualifier.flags.q.constant > - || type->qualifier.flags.q.uniform) { > + || type->qualifier.flags.q.uniform > + || (state->es_shader && state->current_function == NULL)) { > ir_rvalue *new_rhs = validate_assignment(state, initializer_loc, > lhs, rhs, true); > if (new_rhs != NULL) { > @@ -3223,6 +3233,11 @@ process_initializer(ir_variable *var, > ast_declaration *decl, > > ir_constant *constant_value = rhs->constant_expression_value(); > if (!constant_value) { > + const char *const variable_mode = > + (type->qualifier.flags.q.constant) > + ? "const" > + : ((type->qualifier.flags.q.uniform) ? "uniform" : > + "global"); > + > /* If ARB_shading_language_420pack is enabled, initializers of > * const-qualified local variables do not have to be constant > * expressions. Const-qualified global variables must still be > @@ - > 3233,8 +3248,7 @@ process_initializer(ir_variable *var, ast_declaration *decl, > _mesa_glsl_error(& initializer_loc, state, > "initializer of %s variable `%s' must be a " > "constant expression", > - (type->qualifier.flags.q.constant) > - ? "const" : "uniform", > + variable_mode, > decl->identifier); > if (var->type->is_numeric()) { > /* Reduce cascading errors. */ > -- > 2.1.0 > > _______________________________________________ > mesa-dev mailing list > mesa-dev@lists.freedesktop.org > http://lists.freedesktop.org/mailman/listinfo/mesa-dev _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev