From: Ian Romanick Date: Wed, 12 Mar 2014 22:01:12 +0000 (-0700) Subject: glsl: Fold implementation of ir_dereference_record::constant_referenced into wrapper X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=35bf94f901fcbd47cf0e631d370b130b31cd28ee;p=mesa.git glsl: Fold implementation of ir_dereference_record::constant_referenced into wrapper Signed-off-by: Ian Romanick Reviewed-by: Topi Pohjolainen --- diff --git a/src/glsl/ir_constant_expression.cpp b/src/glsl/ir_constant_expression.cpp index c013dfd3595..336ce176510 100644 --- a/src/glsl/ir_constant_expression.cpp +++ b/src/glsl/ir_constant_expression.cpp @@ -412,10 +412,27 @@ constant_referenced(const ir_dereference *deref, store, offset); break; - case ir_type_dereference_record: - ((ir_dereference_record *) deref)->constant_referenced(variable_context, - store, offset); + case ir_type_dereference_record: { + const ir_dereference_record *const dr = + (const ir_dereference_record *) deref; + + const ir_dereference *const deref = dr->record->as_dereference(); + if (!deref) + break; + + ir_constant *substore; + int suboffset; + + if (!constant_referenced(deref, variable_context, substore, suboffset)) + break; + + /* Since we're dropping it on the floor... + */ + assert(suboffset == 0); + + store = substore->get_record_field(dr->field); break; + } case ir_type_dereference_variable: { const ir_dereference_variable *const dv = @@ -493,20 +510,7 @@ void ir_dereference_record::constant_referenced(struct hash_table *variable_context, ir_constant *&store, int &offset) const { - ir_constant *substore; - int suboffset; - const ir_dereference *deref = record->as_dereference(); - if (!deref) { - store = 0; - offset = 0; - return; - } - - if (!::constant_referenced(deref, variable_context, substore, suboffset)) - return; - - store = substore->get_record_field(field); - offset = 0; + ::constant_referenced(this, variable_context, store, offset); } /*@}*/