ir_print_visitor: Print out constant arrays.
authorKenneth Graunke <kenneth@whitecape.org>
Tue, 20 Jul 2010 08:28:09 +0000 (01:28 -0700)
committerKenneth Graunke <kenneth@whitecape.org>
Wed, 21 Jul 2010 23:38:33 +0000 (16:38 -0700)
src/glsl/ir_print_visitor.cpp

index 05ac3029922d88cd11369544cba4e3c5e5380826..1eb073ff6a0b4cff962685a42a2d6e6ca2f4d846 100644 (file)
@@ -270,16 +270,20 @@ void ir_print_visitor::visit(ir_constant *ir)
    print_type(ir->type);
    printf(" (");
 
-   for (unsigned i = 0; i < ir->type->components(); i++) {
-      if (i != 0)
-        printf(" ");
-
-      switch (base_type->base_type) {
-      case GLSL_TYPE_UINT:  printf("%u", ir->value.u[i]); break;
-      case GLSL_TYPE_INT:   printf("%d", ir->value.i[i]); break;
-      case GLSL_TYPE_FLOAT: printf("%f", ir->value.f[i]); break;
-      case GLSL_TYPE_BOOL:  printf("%d", ir->value.b[i]); break;
-      default: assert(0);
+   if (ir->type->is_array()) {
+      for (unsigned i = 0; i < ir->type->length; i++)
+        ir->get_array_element(i)->accept(this);
+   } else {
+      for (unsigned i = 0; i < ir->type->components(); i++) {
+        if (i != 0)
+           printf(" ");
+        switch (base_type->base_type) {
+        case GLSL_TYPE_UINT:  printf("%u", ir->value.u[i]); break;
+        case GLSL_TYPE_INT:   printf("%d", ir->value.i[i]); break;
+        case GLSL_TYPE_FLOAT: printf("%f", ir->value.f[i]); break;
+        case GLSL_TYPE_BOOL:  printf("%d", ir->value.b[i]); break;
+        default: assert(0);
+        }
       }
    }
    printf(")) ");