On Mon, Oct 05, 2015 at 11:42:43AM +0200, Iago Toral Quiroga wrote: > We get these when we operate on vector variables with array accessors > (i.e. things like a[0] where 'a' is a vec4). When we call > variable_referenced() > on these expressions we want to return a reference to 'a' instead of NULL. > > This fixes a problem where we pass a[0] as the first argument to an atomic > SSBO function that expects a buffer variable. In order to check this, we use > variable_referenced(), but that is currently returning NULL in this case, > since > the underlying rvalue is a vector_extract expression.
Reviewed-by: Kristian Høgsberg <k...@bitplanet.net> > --- > src/glsl/ir.cpp | 16 ++++++++++++++++ > src/glsl/ir.h | 2 ++ > 2 files changed, 18 insertions(+) > > diff --git a/src/glsl/ir.cpp b/src/glsl/ir.cpp > index 2c45b9e..4c22843 100644 > --- a/src/glsl/ir.cpp > +++ b/src/glsl/ir.cpp > @@ -662,6 +662,22 @@ ir_expression::get_operator(const char *str) > return (ir_expression_operation) -1; > } > > +ir_variable * > +ir_expression::variable_referenced() const > +{ > + switch (operation) { > + case ir_binop_vector_extract: > + case ir_triop_vector_insert: > + /* We get these for things like a[0] where a is a vector type. In > these > + * cases we want variable_referenced() to return the actual vector > + * variable this is wrapping. > + */ > + return operands[0]->variable_referenced(); > + default: > + return ir_rvalue::variable_referenced(); > + } > +} > + > ir_constant::ir_constant() > : ir_rvalue(ir_type_constant) > { > diff --git a/src/glsl/ir.h b/src/glsl/ir.h > index 43a2bf0..9c9f22d 100644 > --- a/src/glsl/ir.h > +++ b/src/glsl/ir.h > @@ -1731,6 +1731,8 @@ public: > > virtual ir_visitor_status accept(ir_hierarchical_visitor *); > > + virtual ir_variable *variable_referenced() const; > + > ir_expression_operation operation; > ir_rvalue *operands[4]; > }; > -- > 1.9.1 > > _______________________________________________ > 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