An assertion in fs_visitor::remove_dead_constants() would fail on code like this, which accesses a non-existent uniform: uniform vec u[1]; ... a += u[0] + u[1]; Shader code is checked for that error, but apparently only before transformations like loop unrolling. So the following code would get transformed to the same as above and then the assertion would fail: for (int i = 0; i < 2; ++i) a += u[i];
This patch changes the assertion failure to a compile failure. https://bugs.freedesktop.org/show_bug.cgi?id=59429 Signed-off-by: Frank Henigman <fjhenig...@google.com> --- src/mesa/drivers/dri/i965/brw_fs.cpp | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 8e57eb0..548f7d6 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -1467,7 +1467,12 @@ fs_visitor::remove_dead_constants() if (inst->src[i].file != UNIFORM) continue; - assert(constant_nr < (int)c->prog_data.nr_params); + if (constant_nr >= (int)c->prog_data.nr_params) { + ralloc_free(this->params_remap); + this->params_remap = NULL; + fail("accessed non-existent uniform"); + return false; + } /* For now, set this to non-negative. We'll give it the * actual new number in a moment, in order to keep the -- 1.8.1 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev