tgsi: when printing/dumping programs indent loops and conditionals
authorBrian Paul <brianp@vmware.com>
Thu, 20 Aug 2009 16:43:48 +0000 (10:43 -0600)
committerBrian Paul <brianp@vmware.com>
Thu, 20 Aug 2009 16:52:12 +0000 (10:52 -0600)
src/gallium/auxiliary/tgsi/tgsi_dump.c

index f36b1114a9559229bf4e9da8bbaaa7b213586ddf..05b07a3a73eca8c66cc2601225d382e2a964ec94 100644 (file)
 #include "tgsi_info.h"
 #include "tgsi_iterate.h"
 
+
+/** Number of spaces to indent for IF/LOOP/etc */
+static const int indent_spaces = 3;
+
+
 struct dump_ctx
 {
    struct tgsi_iterate_context iter;
 
    uint instno;
    
+   uint indentation;
+
    void (*printf)(struct dump_ctx *ctx, const char *format, ...);
 };
 
@@ -328,6 +335,14 @@ tgsi_dump_immediate(
    iter_immediate( &ctx.iter, (struct tgsi_full_immediate *)imm );
 }
 
+static void
+indent(struct dump_ctx *ctx)
+{
+   uint i;
+   for (i = 0; i < ctx->indentation; i++)
+      TXT(" ");
+}
+
 static boolean
 iter_instruction(
    struct tgsi_iterate_context *iter,
@@ -341,6 +356,15 @@ iter_instruction(
 
    INSTID( instno );
    TXT( ": " );
+
+   /* update indentation */
+   if (inst->Instruction.Opcode == TGSI_OPCODE_ENDIF ||
+       inst->Instruction.Opcode == TGSI_OPCODE_ENDFOR ||
+       inst->Instruction.Opcode == TGSI_OPCODE_ENDLOOP) {
+      ctx->indentation -= indent_spaces;
+   }
+   indent(ctx);
+
    TXT( tgsi_get_opcode_info( inst->Instruction.Opcode )->mnemonic );
 
    switch (inst->Instruction.Saturate) {
@@ -481,6 +505,14 @@ iter_instruction(
       break;
    }
 
+   /* update indentation */
+   if (inst->Instruction.Opcode == TGSI_OPCODE_IF ||
+       inst->Instruction.Opcode == TGSI_OPCODE_ELSE ||
+       inst->Instruction.Opcode == TGSI_OPCODE_BGNFOR ||
+       inst->Instruction.Opcode == TGSI_OPCODE_BGNLOOP) {
+      ctx->indentation += indent_spaces;
+   }
+
    EOL();
 
    return TRUE;
@@ -495,6 +527,7 @@ tgsi_dump_instruction(
 
    ctx.instno = instno;
    ctx.printf = dump_ctx_printf;
+   ctx.indentation = 0;
 
    iter_instruction( &ctx.iter, (struct tgsi_full_instruction *)inst );
 }
@@ -527,6 +560,7 @@ tgsi_dump(
 
    ctx.instno = 0;
    ctx.printf = dump_ctx_printf;
+   ctx.indentation = 0;
 
    tgsi_iterate_shader( tokens, &ctx.iter );
 }
@@ -579,6 +613,7 @@ tgsi_dump_str(
 
    ctx.base.instno = 0;
    ctx.base.printf = &str_dump_ctx_printf;
+   ctx.base.indentation = 0;
 
    ctx.str = str;
    ctx.str[0] = 0;