On Wed, Mar 12, 2014 at 07:20:04PM -0400, Connor Abbott wrote: > On Wed, Mar 12, 2014 at 6:49 PM, Ian Romanick <i...@freedesktop.org> wrote: > > From: Ian Romanick <ian.d.roman...@intel.com> > > > > Signed-off-by: Ian Romanick <ian.d.roman...@intel.com> > > --- > > src/glsl/ir_constant_expression.cpp | 52 > > +++++++++++++++++++++++++------------ > > 1 file changed, 36 insertions(+), 16 deletions(-) > > > > diff --git a/src/glsl/ir_constant_expression.cpp > > b/src/glsl/ir_constant_expression.cpp > > index a31e579..4149a0e 100644 > > --- a/src/glsl/ir_constant_expression.cpp > > +++ b/src/glsl/ir_constant_expression.cpp > > @@ -395,6 +395,37 @@ unpack_half_1x16(uint16_t u) > > * The offset is used when the reference is to a specific column of a > > matrix. > > */ > > /*@{*/ > > +static bool > > +constant_referenced(const ir_dereference *deref, > > + struct hash_table *variable_context, > > + ir_constant *&store, int &offset) > > +{ > > + switch (deref->ir_type) { > > + case ir_type_dereference_array: > > + ((ir_dereference_array *) > > deref)->constant_referenced(variable_context, > > + store, offset); > > + break; > > + > > + case ir_type_dereference_record: > > + ((ir_dereference_record *) > > deref)->constant_referenced(variable_context, > > + store, > > offset); > > + break; > > + > > + case ir_type_dereference_variable: > > + ((ir_dereference_variable *) > > deref)->constant_referenced(variable_context, > > + store, > > offset); > > + break; > > + > > + default: > > + assert(!"Should not get here."); > > + store = NULL; > > + offset = 0; > > + break; > > + } > > + > > + return store != NULL; > > +} > > + > > void > > ir_dereference_variable::constant_referenced(struct hash_table > > *variable_context, > > ir_constant *&store, int > > &offset) const > > @@ -433,13 +464,8 @@ ir_dereference_array::constant_referenced(struct > > hash_table *variable_context, > > return; > > } > > > > - deref->constant_referenced(variable_context, substore, suboffset); > > - > > - if (!substore) { > > - store = 0; > > - offset = 0; > > + if (!::constant_referenced(deref, variable_context, substore, > > suboffset)) > > return; > > - } > > Question: why do you have the :: here...
Here the caller is "ir_dereference_variable::constant_referenced()". This is telling the compiler to call the static newly introduced function instead of recurring to here again. Same applies for the "ir_dereference_record()" below. > > > > > const glsl_type *vt = array->type; > > if (vt->is_array()) { > > @@ -475,13 +501,8 @@ ir_dereference_record::constant_referenced(struct > > hash_table *variable_context, > > return; > > } > > > > - deref->constant_referenced(variable_context, substore, suboffset); > > - > > - if (!substore) { > > - store = 0; > > - offset = 0; > > + if (!::constant_referenced(deref, variable_context, substore, > > suboffset)) > > return; > > - } > > and here... > > > > > store = substore->get_record_field(field); > > offset = 0; > > @@ -1814,9 +1835,8 @@ bool > > ir_function_signature::constant_expression_evaluate_expression_list(const s > > > > ir_constant *store = NULL; > > int offset = 0; > > - asg->lhs->constant_referenced(variable_context, store, offset); > > > > - if (!store) > > + if (!constant_referenced(asg->lhs, variable_context, store, > > offset)) > > return false; > > but not here... Here in turn there is no choice for the compiler to make as "ir_function_signature" does not have a member function called "constant_referenced()". > > > > > ir_constant *value = > > asg->rhs->constant_expression_value(variable_context); > > @@ -1847,9 +1867,9 @@ bool > > ir_function_signature::constant_expression_evaluate_expression_list(const s > > > > ir_constant *store = NULL; > > int offset = 0; > > - call->return_deref->constant_referenced(variable_context, store, > > offset); > > > > - if (!store) > > + if (!constant_referenced(call->return_deref, variable_context, > > + store, offset)) > > or here? Compiler issues? > > > return false; > > > > ir_constant *value = > > call->constant_expression_value(variable_context); > > -- > > 1.8.1.4 > > > > _______________________________________________ > > 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 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev