summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorIan Romanick <ian.d.romanick@intel.com>2014-03-12 15:01:12 -0700
committerIan Romanick <ian.d.romanick@intel.com>2014-03-25 12:09:36 -0700
commit35bf94f901fcbd47cf0e631d370b130b31cd28ee (patch)
treeafc715f8c63901a650dd8903804367b0b1b1857c
parentb66319b006a23875390769b6b4fde83e6e938f23 (diff)
glsl: Fold implementation of ir_dereference_record::constant_referenced into wrapper
Signed-off-by: Ian Romanick <ian.d.romanick@intel.com> Reviewed-by: Topi Pohjolainen <topi.pohjolainen@intel.com>
-rw-r--r--src/glsl/ir_constant_expression.cpp38
1 files changed, 21 insertions, 17 deletions
diff --git a/src/glsl/ir_constant_expression.cpp b/src/glsl/ir_constant_expression.cpp
index c013dfd359..336ce17651 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);
}
/*@}*/