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

Reply via email to