linker: Add imported functions to the linked IR
[mesa.git] / src / glsl / ir_print_visitor.cpp
index e5067bfdad03856ebfbc251cec5ee7b854ba8685..82ccc722fa28762f4fe4fd60345450306fca9385 100644 (file)
@@ -97,7 +97,7 @@ void ir_print_visitor::visit(ir_variable *ir)
    const char *const cent = (ir->centroid) ? "centroid " : "";
    const char *const inv = (ir->invariant) ? "invariant " : "";
    const char *const mode[] = { "", "uniform ", "in ", "out ", "inout ",
-                               "temporary " };
+                               "const_in ", "sys ", "temporary " };
    const char *const interp[] = { "", "flat", "noperspective" };
 
    printf("(%s%s%s%s) ",
@@ -153,17 +153,10 @@ void ir_print_visitor::visit(ir_function_signature *ir)
 
 void ir_print_visitor::visit(ir_function *ir)
 {
-   if (!ir->has_user_signature())
-      return;
-
    printf("(function %s\n", ir->name);
    indentation++;
    foreach_iter(exec_list_iterator, iter, *ir) {
       ir_function_signature *const sig = (ir_function_signature *) iter.get();
-
-      if (sig->is_builtin)
-        continue;
-
       indent();
       sig->accept(this);
       printf("\n");
@@ -199,7 +192,15 @@ void ir_print_visitor::visit(ir_texture *ir)
 
    ir->coordinate->accept(this);
 
-   printf(" (%d %d %d) ", ir->offsets[0], ir->offsets[1], ir->offsets[2]);
+   printf(" ");
+
+   if (ir->offset != NULL) {
+      ir->offset->accept(this);
+   } else {
+      printf("0");
+   }
+
+   printf(" ");
 
    if (ir->op != ir_txf) {
       if (ir->projector)
@@ -288,9 +289,6 @@ void ir_print_visitor::visit(ir_assignment *ir)
 
    if (ir->condition)
       ir->condition->accept(this);
-   else
-      printf("(constant bool (1))");
-
 
    char mask[5];
    unsigned j = 0;
@@ -325,6 +323,15 @@ void ir_print_visitor::visit(ir_constant *ir)
    if (ir->type->is_array()) {
       for (unsigned i = 0; i < ir->type->length; i++)
         ir->get_array_element(i)->accept(this);
+   } else if (ir->type->is_record()) {
+      ir_constant *value = (ir_constant *) ir->components.get_head();
+      for (unsigned i = 0; i < ir->type->length; i++) {
+        printf("(%s ", ir->type->fields.structure->name);
+        value->accept(this);
+        printf(")");
+
+        value = (ir_constant *) value->next;
+      }
    } else {
       for (unsigned i = 0; i < ir->type->components(); i++) {
         if (i != 0)