IR print visitor: Add some support for printing types and constants
authorIan Romanick <ian.d.romanick@intel.com>
Wed, 10 Mar 2010 05:44:34 +0000 (21:44 -0800)
committerIan Romanick <ian.d.romanick@intel.com>
Wed, 10 Mar 2010 05:44:34 +0000 (21:44 -0800)
ir_print_visitor.cpp

index 365ff5933e3b561fea7492cbeab8cf7fe6105a4b..c09de83ffd6b03eca59e0a75ba3b237395a2a5ec 100644 (file)
  */
 #include <cstdio>
 #include "ir_print_visitor.h"
+#include "glsl_types.h"
+
+static void
+print_type(const glsl_type *t)
+{
+   if (t->base_type == GLSL_TYPE_ARRAY) {
+      printf("array\n");
+      printf("    (");
+      print_type(t->fields.array);
+      printf(")\n");
+
+      printf("    (%u)\n", t->length);
+      printf(")");
+   } else if (t->base_type == GLSL_TYPE_STRUCT) {
+      printf("struct (%s %u\n", t->name ? t->name : "@", t->length);
+      printf("    (FINISHME: structure fields go here)\n");
+      printf(")");
+   } else {
+      printf("%s", t->name);
+   }
+}
+
 
 void ir_print_visitor::visit(ir_variable *ir)
 {
@@ -35,7 +57,10 @@ void ir_print_visitor::visit(ir_variable *ir)
    printf("    (%s%s%s%s)\n",
          cent, inv, mode[ir->mode], interp[ir->interpolation]);
 
-   printf("    (FINISHME: type goes here)\n");
+   printf("    (");
+   print_type(ir->type);
+   printf(")\n");
+
    printf("    (%s)\n", ir->name);
    printf(")\n");
 }
@@ -98,6 +123,12 @@ void ir_print_visitor::visit(ir_assignment *ir)
 
 void ir_print_visitor::visit(ir_constant *ir)
 {
-   printf("%s:%d:\n", __func__, __LINE__);
    (void) ir;
+
+   printf("(constant\n");
+   printf("    (");
+   print_type(ir->type);
+   printf(")\n");
+   printf("    (FINISHME: value goes here)\n");
+   printf(")\n");
 }