]> git.tdb.fi Git - libs/gl.git/blobdiff - source/glsl/debug.cpp
Tweak debug output
[libs/gl.git] / source / glsl / debug.cpp
index 2bc3a893e099384e16c663cfdfd601e3a945d85d..018408c7a74d83b8974a7252061b40ab72695eb6 100644 (file)
@@ -10,14 +10,11 @@ namespace SL {
 
 const std::string &DumpTree::apply(Stage &stage)
 {
-       formatted = format("Stage %s\n", Stage::get_stage_name(stage.type));
+       formatted = format("Stage: %s\n", Stage::get_stage_name(stage.type));
        tree.push_back(BRANCH);
-       for(map<string, VariableDeclaration *>::const_iterator i=stage.in_variables.begin(); i!=stage.in_variables.end(); ++i)
-               append(format("Input: %%%d %s %s", get_label(*i->second), i->second->type, i->first));
-       for(map<string, VariableDeclaration *>::const_iterator i=stage.out_variables.begin(); i!=stage.out_variables.end(); ++i)
-               append(format("Output: %%%d %s %s", get_label(*i->second), i->second->type, i->first));
+       append(format("Version: %d.%02d", stage.required_features.glsl_version.major, stage.required_features.glsl_version.minor));
        last_branch();
-       visit(stage.content);
+       stage.content.visit(*this);
        return formatted;
 }
 
@@ -83,10 +80,13 @@ void DumpTree::visit(Block &block)
        begin_sub();
 
        for(std::map<string, StructDeclaration *>::const_iterator i=block.types.begin(); i!=block.types.end(); ++i)
-               append(format("Type %%%d %s", get_label(*i->second), i->first));
+               append(format("Type: %%%d %s", get_label(*i->second), i->first));
 
        for(std::map<string, VariableDeclaration *>::const_iterator i=block.variables.begin(); i!=block.variables.end(); ++i)
-               append(format("Variable %%%d %s %s", get_label(*i->second), i->second->type, i->first));
+               append(format("Variable: %%%d %s %s", get_label(*i->second), i->second->type, i->first));
+
+       for(std::set<InterfaceBlock *>::const_iterator i=block.interfaces.begin(); i!=block.interfaces.end(); ++i)
+               append(format("Interface: %%%d %s %s", get_label(*i->second), i->second->interface, i->second->name));
 
        bool labeled_body = (!block.types.empty() || !block.variables.empty());
        if(labeled_body)
@@ -127,7 +127,11 @@ void DumpTree::visit(VariableReference &var)
 
 void DumpTree::visit(MemberAccess &memacc)
 {
-       annotated_branch(format("Member access: .%s", memacc.member), *memacc.left);
+       string text = "Member access:";
+       if(memacc.declaration)
+               text += format(" %%%d", get_label(*memacc.declaration));
+       text += format(" .%s", memacc.member);
+       annotated_branch(text, *memacc.left);
 }
 
 void DumpTree::visit(UnaryExpression &unary)
@@ -149,6 +153,10 @@ void DumpTree::visit(Assignment &assign)
 {
        append(format("Assignment: %s%s", assign.oper, (assign.self_referencing ? " (self-referencing)" : "")));
        begin_sub();
+       if(assign.target_declaration)
+       {
+               append(format("Target: %%%d %s %s", get_label(*assign.target_declaration), assign.target_declaration->type, assign.target_declaration->name));
+       }
        assign.left->visit(*this);
        last_branch();
        assign.right->visit(*this);
@@ -241,7 +249,12 @@ void DumpTree::visit(VariableDeclaration &var)
        if(!var.init_expression)
                last_branch();
        if(var.array)
-               annotated_branch("Array []", *var.array_size);
+       {
+               if(var.array_size)
+                       annotated_branch("Array []", *var.array_size);
+               else
+                       append("Array []");
+       }
 
        last_branch();
        if(var.init_expression)
@@ -261,7 +274,7 @@ void DumpTree::visit(FunctionDeclaration &func)
        for(NodeArray<VariableDeclaration>::const_iterator i=func.parameters.begin(); i!=func.parameters.end(); ++i)
                (*i)->visit(*this);
        if(func.definition)
-               append(format("Definition %%%d", get_label(*func.definition)));
+               append(format("Definition: %%%d", get_label(*func.definition)));
        last_branch();
        func.body.visit(*this);
        end_sub();
@@ -300,6 +313,18 @@ void DumpTree::visit(Iteration &iter)
        end_sub();
 }
 
+void DumpTree::visit(Passthrough &pass)
+{
+       append("passthrough");
+       if(pass.subscript)
+       {
+               begin_sub();
+               last_branch();
+               pass.subscript->visit(*this);
+               end_sub();
+       }
+}
+
 void DumpTree::visit(Return &ret)
 {
        if(ret.expression)