On Fri, May 24, 2013 at 6:28 PM, Matt Turner <matts...@gmail.com> wrote: > Required by ARB_shading_language_420pack. > --- > src/glsl/ast_to_hir.cpp | 30 +++++++++++++++++++----------- > 1 file changed, 19 insertions(+), 11 deletions(-) > > diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp > index 6e689b4..6b56e87 100644 > --- a/src/glsl/ast_to_hir.cpp > +++ b/src/glsl/ast_to_hir.cpp > @@ -2337,17 +2337,25 @@ process_initializer(ir_variable *var, ast_declaration > *decl, > > ir_constant *constant_value = rhs->constant_expression_value(); > if (!constant_value) { > - _mesa_glsl_error(& initializer_loc, state, > - "initializer of %s variable `%s' must be a " > - "constant expression", > - (type->qualifier.flags.q.constant) > - ? "const" : "uniform", > - decl->identifier); > - if (var->type->is_numeric()) { > - /* Reduce cascading errors. */ > - var->constant_value = ir_constant::zero(state, var->type); > - } > - } else { > + /* 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 > + * initialized with constant expressions. > + */ > + if (!state->ARB_shading_language_420pack_enable > + || state->current_function == NULL) { > + _mesa_glsl_error(& initializer_loc, state, > + "initializer of %s variable `%s' must be a " > + "constant expression", > + (type->qualifier.flags.q.constant) > + ? "const" : "uniform", > + decl->identifier); > + if (var->type->is_numeric()) { > + /* Reduce cascading errors. */ > + var->constant_value = ir_constant::zero(state, var->type); > + } > + } > + } else { > rhs = constant_value; > var->constant_value = constant_value; > } > -- > 1.8.1.5 >
Ping. Check out the piglit tests: const-var-non-constant-expr.shader_test global-const-var-non-const-expr.frag Those confirm that this change is correct. _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev