summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorEric Anholt <eric@anholt.net>2010-07-29 14:36:59 -0700
committerEric Anholt <eric@anholt.net>2010-07-29 14:38:04 -0700
commitbf496862be1ba863285aa2c1a2262b2d764c3e53 (patch)
tree7fe064181d6fafef457f9019dd86fec1a8546e8f
parent9a8eb684d4cd602b6c5e6876cd1eceabc3a8896c (diff)
glsl2: When dumping IR for debug, indent nested blocks.
No more trying to match parens in my head when looking at the body of a short function containing an if statement.
-rw-r--r--src/glsl/ir_print_visitor.cpp53
-rw-r--r--src/glsl/ir_print_visitor.h7
2 files changed, 54 insertions, 6 deletions
diff --git a/src/glsl/ir_print_visitor.cpp b/src/glsl/ir_print_visitor.cpp
index 88a0a6f0c8..7df9d8adcd 100644
--- a/src/glsl/ir_print_visitor.cpp
+++ b/src/glsl/ir_print_visitor.cpp
@@ -65,6 +65,13 @@ _mesa_print_ir(exec_list *instructions,
printf("\n)");
}
+
+void ir_print_visitor::indent(void)
+{
+ for (int i = 0; i < indentation; i++)
+ printf(" ");
+}
+
static void
print_type(const glsl_type *t)
{
@@ -102,23 +109,43 @@ void ir_print_visitor::visit(ir_variable *ir)
void ir_print_visitor::visit(ir_function_signature *ir)
{
printf("(signature ");
+ indentation++;
+
print_type(ir->return_type);
- printf("\n (parameters\n");
+ printf("\n");
+ indent();
+
+ printf("(parameters\n");
+ indentation++;
+
foreach_iter(exec_list_iterator, iter, ir->parameters) {
ir_variable *const inst = (ir_variable *) iter.get();
+ indent();
inst->accept(this);
printf("\n");
}
- printf(" )\n(");
+ indentation--;
+
+ indent();
+ printf(")\n");
+
+ indent();
+
+ printf("(\n");
+ indentation++;
foreach_iter(exec_list_iterator, iter, ir->body) {
ir_instruction *const inst = (ir_instruction *) iter.get();
+ indent();
inst->accept(this);
printf("\n");
}
+ indentation--;
+ indent();
printf("))\n");
+ indentation--;
}
@@ -135,13 +162,16 @@ void ir_print_visitor::visit(ir_function *ir)
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();
+ indent();
sig->accept(this);
printf("\n");
}
-
+ indentation--;
+ indent();
printf(")\n\n");
}
@@ -352,21 +382,33 @@ ir_print_visitor::visit(ir_if *ir)
ir->condition->accept(this);
printf("(\n");
+ indentation++;
+
foreach_iter(exec_list_iterator, iter, ir->then_instructions) {
ir_instruction *const inst = (ir_instruction *) iter.get();
+ indent();
inst->accept(this);
printf("\n");
}
+
+ indentation--;
+ indent();
printf(")\n");
+ indent();
printf("(\n");
+ indentation++;
+
foreach_iter(exec_list_iterator, iter, ir->else_instructions) {
ir_instruction *const inst = (ir_instruction *) iter.get();
+ indent();
inst->accept(this);
printf("\n");
}
+ indentation--;
+ indent();
printf("))\n");
}
@@ -387,12 +429,17 @@ ir_print_visitor::visit(ir_loop *ir)
if (ir->increment != NULL)
ir->increment->accept(this);
printf(") (\n");
+ indentation++;
+
foreach_iter(exec_list_iterator, iter, ir->body_instructions) {
ir_instruction *const inst = (ir_instruction *) iter.get();
+ indent();
inst->accept(this);
printf("\n");
}
+ indentation--;
+ indent();
printf("))\n");
}
diff --git a/src/glsl/ir_print_visitor.h b/src/glsl/ir_print_visitor.h
index 3db42e24ca..4feeb8c184 100644
--- a/src/glsl/ir_print_visitor.h
+++ b/src/glsl/ir_print_visitor.h
@@ -38,9 +38,8 @@ extern void _mesa_print_ir(exec_list *instructions,
class ir_print_visitor : public ir_visitor {
public:
ir_print_visitor()
- : deref_depth(0)
{
- /* empty */
+ indentation = 0;
}
virtual ~ir_print_visitor()
@@ -48,6 +47,8 @@ public:
/* empty */
}
+ void indent(void);
+
/**
* \name Visit methods
*
@@ -76,7 +77,7 @@ public:
/*@}*/
private:
- int deref_depth;
+ int indentation;
};
#endif /* IR_PRINT_VISITOR_H */