diff options
author | Ian Romanick <[email protected]> | 2014-03-12 15:01:12 -0700 |
---|---|---|
committer | Ian Romanick <[email protected]> | 2014-03-25 12:09:36 -0700 |
commit | 35bf94f901fcbd47cf0e631d370b130b31cd28ee (patch) | |
tree | afc715f8c63901a650dd8903804367b0b1b1857c | |
parent | b66319b006a23875390769b6b4fde83e6e938f23 (diff) |
glsl: Fold implementation of ir_dereference_record::constant_referenced into wrapper
Signed-off-by: Ian Romanick <[email protected]>
Reviewed-by: Topi Pohjolainen <[email protected]>
-rw-r--r-- | src/glsl/ir_constant_expression.cpp | 38 |
1 files changed, 21 insertions, 17 deletions
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); } /*@}*/ |