OK, cool. This patch is
Reviewed-by: Chris Forbes <chr...@ijw.co.nz> On Mon, Dec 22, 2014 at 11:44 PM, Timothy Arceri <t_arc...@yahoo.com.au> wrote: > > > > > > ----- Original Message ----- > From: Chris Forbes <chr...@ijw.co.nz> > >>Does this work correctly for arrays of interface blocks too? > >> > > Hi Chris, sorry this got lost in my indox. > > > Just to be sure I made some tests: > http://lists.freedesktop.org/archives/piglit/2014-December/013847.html > > The answer is yes it woks correctly however because of the input check it was > already catching the problem in geometry shaders. > > > Before my patch: > > > error: geometry shader accesses element 4 of i, but only 4 input vertices > > After my patch: > > > error: shader input `i' declared as type `ArrayInterfaceBlock[4]' but > outermost dimension has an index of `4' > > On Mon, Dec 1, 2014 at 10:37 AM, Timothy Arceri <t_arc...@yahoo.com.au> wrote: >> V2: Improve error message. >> >> Signed-off-by: Timothy Arceri <t_arc...@yahoo.com.au> >> --- >> src/glsl/linker.cpp | 21 ++++++++++++++++++++- >> 1 file changed, 20 insertions(+), 1 deletion(-) >> >> I came across this when I was writting arrays of arrays piglit tests. >> This change fixes the new link error tests for single dimension arrays >> which I've sent to the piglit list [1]. >> >> Example error message: >> "shader output `color' declared as type `vec4[3]' but outermost >> dimension has an index of `3'" >> >> I've also run all the glsl piglit tests without any regressions. >> >> [1] http://lists.freedesktop.org/archives/piglit/2014-November/013478.html >> >> diff --git a/src/glsl/linker.cpp b/src/glsl/linker.cpp >> index de6b1fb..03cbe85 100644 >> --- a/src/glsl/linker.cpp >> +++ b/src/glsl/linker.cpp >> @@ -732,8 +732,27 @@ cross_validate_globals(struct gl_shader_program *prog, >> && ((var->type->length == 0) >> || (existing->type->length == 0))) { >> if (var->type->length != 0) { >> + if (var->type->length <= >> existing->data.max_array_access) { >> + linker_error(prog, "%s `%s' declared as type " >> + "`%s' but outermost dimension has an >> index" >> + " of `%i'\n", >> + mode_string(var), >> + var->name, var->type->name, >> + existing->data.max_array_access); >> + return; >> + } >> existing->type = var->type; >> - } >> + } else if (existing->type->length != 0 >> + && existing->type->length <= >> + var->data.max_array_access) { >> + linker_error(prog, "%s `%s' declared as type " >> + "`%s' but outermost dimension has an >> index" >> + " of `%i'\n", >> + mode_string(var), >> + var->name, existing->type->name, >> + var->data.max_array_access); >> + return; >> + } >> } else if (var->type->is_record() >> && existing->type->is_record() >> && existing->type->record_compare(var->type)) { >> -- >> 1.9.3 >> >> _______________________________________________ >> 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