Mesa (master): glsl: Fold implementation of ir_dereference_record:: constant_referenced into wrapper

Ian Romanick idr at kemper.freedesktop.org
Tue Mar 25 19:09:48 UTC 2014


Module: Mesa
Branch: master
Commit: 35bf94f901fcbd47cf0e631d370b130b31cd28ee
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=35bf94f901fcbd47cf0e631d370b130b31cd28ee

Author: Ian Romanick <ian.d.romanick at intel.com>
Date:   Wed Mar 12 15:01:12 2014 -0700

glsl: Fold implementation of ir_dereference_record::constant_referenced into wrapper

Signed-off-by: Ian Romanick <ian.d.romanick at intel.com>
Reviewed-by: Topi Pohjolainen <topi.pohjolainen at intel.com>

---

 src/glsl/ir_constant_expression.cpp |   38 +++++++++++++++++++----------------
 1 file changed, 21 insertions(+), 17 deletions(-)

diff --git a/src/glsl/ir_constant_expression.cpp b/src/glsl/ir_constant_expression.cpp
index c013dfd..336ce17 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);
 }
 /*@}*/
 




More information about the mesa-commit mailing list