<div dir="ltr"><span style="font-family:arial,sans-serif;font-size:13px">Thanks,</span><div style="font-family:arial,sans-serif;font-size:13px">I looked at piglit tests and they look OK if they are only supposed to test whether the shader compiles and links. It doesn't look like they test the results of rendering which could be more useful?</div>
</div><div class="gmail_extra"><br><br><div class="gmail_quote">On Tue, Sep 3, 2013 at 3:19 PM, Dominik Behr <span dir="ltr"><<a href="mailto:dbehr@google.com" target="_blank">dbehr@google.com</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr">Thanks,<div>I looked at piglit tests and they look OK if they are only supposed to test whether the shader compiles and links. It doesn't look like they test the results of rendering which could be more useful?</div>

</div><div class="gmail_extra"><br clear="all"><div><div dir="ltr"><div>--</div>Dominik<br></div></div><div><div class="h5">
<br><br><div class="gmail_quote">On Tue, Sep 3, 2013 at 2:52 PM, Matt Turner <span dir="ltr"><<a href="mailto:mattst88@gmail.com" target="_blank">mattst88@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">

<div><div>On Wed, Aug 28, 2013 at 1:10 PM, Dominik Behr <<a href="mailto:dbehr@chromium.org" target="_blank">dbehr@chromium.org</a>> wrote:<br>
> Fixes a bug where if an uniform array is passed to a function the accesses<br>
> to the array are not propagated so later all but the first vector of the<br>
> uniform array are removed in parcel_out_uniform_storage resulting in<br>
> broken shaders and out of bounds access to arrays in<br>
> brw::vec4_visitor::pack_uniform_registers.<br>
><br>
> Signed-off-by: Dominik Behr <<a href="mailto:dbehr@chromium.org" target="_blank">dbehr@chromium.org</a>><br>
> ---<br>
>  src/glsl/link_functions.cpp | 29 +++++++++++++++++++++++++++++<br>
>  1 file changed, 29 insertions(+)<br>
><br>
> diff --git a/src/glsl/link_functions.cpp b/src/glsl/link_functions.cpp<br>
> index 6b3e154..d935546 100644<br>
> --- a/src/glsl/link_functions.cpp<br>
> +++ b/src/glsl/link_functions.cpp<br>
> @@ -173,6 +173,35 @@ public:<br>
>        return visit_continue;<br>
>     }<br>
><br>
> +   virtual ir_visitor_status visit_leave(ir_call *ir)<br>
> +   {<br>
> +      /* Traverse list of function parameters, and for array parameters<br>
> +         propagate max_array_access, Otherwise arrays that are only referenced<br>
> +         from inside functions via function parameters will be incorrectly<br>
> +         optimized. This will lead to incorrect code being generated (or worse).<br>
> +         Do it when leaving the node so the childen would propagate their<br>
> +         array accesses first */<br>
> +<br>
> +      const exec_node *formal_param_node = ir->callee->parameters.get_head();<br>
> +      const exec_node *actual_param_node = ir->actual_parameters.get_head();<br>
> +      while (!actual_param_node->is_tail_sentinel()) {<br>
> +         ir_variable *formal_param = (ir_variable *) formal_param_node;<br>
> +         ir_rvalue *actual_param = (ir_rvalue *) actual_param_node;<br>
> +<br>
> +         formal_param_node = formal_param_node->get_next();<br>
> +         actual_param_node = actual_param_node->get_next();<br>
> +<br>
> +         if (formal_param->type->is_array()) {<br>
> +            ir_dereference_variable *deref = actual_param->as_dereference_variable();<br>
> +            if (deref && deref->var && deref->var->type->is_array()) {<br>
> +               deref->var->max_array_access =<br>
> +                  MAX2(formal_param->max_array_access, deref->var->max_array_access);<br>
> +            }<br>
> +         }<br>
> +      }<br>
> +      return visit_continue;<br>
> +   }<br>
> +<br>
>     virtual ir_visitor_status visit(ir_dereference_variable *ir)<br>
>     {<br>
>        if (hash_table_find(locals, ir->var) == NULL) {<br>
> --<br>
> 1.8.3.1<br>
<br>
</div></div>Reviewed-and-Tested-by: Matt Turner <<a href="mailto:mattst88@gmail.com" target="_blank">mattst88@gmail.com</a>><br>
<br>
I've sent four tests to the piglit list and Cc'd you. Take a look at<br>
them and make sure they're exercising the thing you want to test.<br>
<br>
I'll commit this patch tomorrow, assuming no other comments or<br>
problems with the tests. I'll also tag it for the stable branches,<br>
since it's definitely a bug fix.<br>
<br>
Thanks a bunch, Dominik!<br>
<span><font color="#888888"><br>
Matt<br>
</font></span></blockquote></div><br></div></div></div>
</blockquote></div><br></div>