Could you add something to piglit which tries this with AoA to make sure that your logic is right?
On Fri, May 6, 2016 at 11:54 AM, Juan A. Suarez Romero <jasua...@igalia.com> wrote: > Copy propagate is not applied in function parameters when they are out > or inout. > > But if the parameter is an array, we can copy propagate the index array. > > This also fixes shaders@out-parameter-indexing piglit tests, that > exposes a wrong handling of inout function parameters in Mesa. > > This commit does not produce any piglit regression, nor any change in > shader-db results. > > v2: > - Deal with swizzles (jasuarez) > - Use a loop top peel off all array dereferences (Ilia) > --- > src/compiler/glsl/opt_copy_propagation.cpp | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/src/compiler/glsl/opt_copy_propagation.cpp > b/src/compiler/glsl/opt_copy_propagation.cpp > index ae62921..e464de3 100644 > --- a/src/compiler/glsl/opt_copy_propagation.cpp > +++ b/src/compiler/glsl/opt_copy_propagation.cpp > @@ -193,6 +193,24 @@ ir_copy_propagation_visitor::visit_enter(ir_call *ir) > if (sig_param->data.mode != ir_var_function_out > && sig_param->data.mode != ir_var_function_inout) { > ir->accept(this); > + } else { > + /* Peeling of all array dereferences / swizzles */ > + ir_dereference_array *ir_array; > + ir_swizzle *ir_swizzle; > + do { > + ir_array = ir->as_dereference_array(); > + if (ir_array) { > + ir_array->array_index->accept(this); > + ir = ir_array->array; > + continue; > + } > + ir_swizzle = ir->as_swizzle(); > + if (ir_swizzle) { > + ir = ir_swizzle->val; > + continue; > + } > + ir = NULL; > + } while (ir); How about while (true) { if ((ir_array = ir->as_dereference_array()) { } else if ((ir_swizzle = ir->as_swizzle()) { } else { break; } } IMHO that better expresses what you're trying to do. Or something else like that. Also, are vector extracts still a thing at this point, or are they already lowered? Like vec4[1] instead of vec4.y. -ilia _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/mesa-dev