The FINISHME comment is a relic from another time, before shader inputs and function inputs were split. Removed.
Marked for 10.0/10.1 and pushed with Ian's r-b from IRC On Mon, Apr 21, 2014 at 4:06 PM, Chris Forbes <chr...@ijw.co.nz> wrote: > Previously this was special-cased for VS and FS; it never got updated > when geometry shaders came along. Generalize using is_varying_var() so > this won't be broken again with tessellation. > > Note that there are two copies of the logic for `invariant`: It can be > present as part of a new declaration, and also as a redeclaration of an > existing variable or block member. > > Fixes the four new piglits: > specc/glsl-1.50/compiler/invariant-qualifier-*.geom > > Signed-off-by: Chris Forbes <chr...@ijw.co.nz> > --- > src/glsl/ast_to_hir.cpp | 34 +++++++++++----------------------- > 1 file changed, 11 insertions(+), 23 deletions(-) > > diff --git a/src/glsl/ast_to_hir.cpp b/src/glsl/ast_to_hir.cpp > index 35d58e9..e4f3f77 100644 > --- a/src/glsl/ast_to_hir.cpp > +++ b/src/glsl/ast_to_hir.cpp > @@ -3065,16 +3065,10 @@ ast_declarator_list::hir(exec_list *instructions, > _mesa_glsl_error(& loc, state, > "undeclared variable `%s' cannot be marked " > "invariant", decl->identifier); > - } else if ((state->stage == MESA_SHADER_VERTEX) > - && (earlier->data.mode != ir_var_shader_out)) { > - _mesa_glsl_error(& loc, state, > - "`%s' cannot be marked invariant, vertex shader > " > - "outputs only", decl->identifier); > - } else if ((state->stage == MESA_SHADER_FRAGMENT) > - && (earlier->data.mode != ir_var_shader_in)) { > - _mesa_glsl_error(& loc, state, > - "`%s' cannot be marked invariant, fragment > shader " > - "inputs only", decl->identifier); > + } else if (!is_varying_var(earlier, state->stage)) { > + _mesa_glsl_error(&loc, state, > + "`%s' cannot be marked invariant; interfaces > between " > + "shader stages only.", decl->identifier); > } else if (earlier->data.used) { > _mesa_glsl_error(& loc, state, > "variable `%s' may not be redeclared " > @@ -3250,19 +3244,13 @@ ast_declarator_list::hir(exec_list *instructions, > & loc, false); > > if (this->type->qualifier.flags.q.invariant) { > - if ((state->stage == MESA_SHADER_VERTEX) && > - var->data.mode != ir_var_shader_out) { > - _mesa_glsl_error(& loc, state, > - "`%s' cannot be marked invariant, vertex shader > " > - "outputs only", var->name); > - } else if ((state->stage == MESA_SHADER_FRAGMENT) && > - var->data.mode != ir_var_shader_in) { > - /* FINISHME: Note that this doesn't work for invariant on > - * a function signature inval > - */ > - _mesa_glsl_error(& loc, state, > - "`%s' cannot be marked invariant, fragment > shader " > - "inputs only", var->name); > + /* FINISHME: Note that this doesn't work for invariant on > + * a function signature inval > + */ > + if (!is_varying_var(var, state->stage)) { > + _mesa_glsl_error(&loc, state, > + "`%s' cannot be marked invariant; interfaces > between " > + "shader stages only", var->name); > } > } > > -- > 1.9.2 > _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev