Mesa (master): tgsi: when printing/ dumping programs indent loops and conditionals

Brian Paul brianp at kemper.freedesktop.org
Thu Aug 20 16:52:55 UTC 2009


Module: Mesa
Branch: master
Commit: 45cd9d80dbc7298240b5dfaf929ecebeb5c6c6af
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=45cd9d80dbc7298240b5dfaf929ecebeb5c6c6af

Author: Brian Paul <brianp at vmware.com>
Date:   Thu Aug 20 10:43:48 2009 -0600

tgsi: when printing/dumping programs indent loops and conditionals

---

 src/gallium/auxiliary/tgsi/tgsi_dump.c |   35 ++++++++++++++++++++++++++++++++
 1 files changed, 35 insertions(+), 0 deletions(-)

diff --git a/src/gallium/auxiliary/tgsi/tgsi_dump.c b/src/gallium/auxiliary/tgsi/tgsi_dump.c
index f36b111..05b07a3 100644
--- a/src/gallium/auxiliary/tgsi/tgsi_dump.c
+++ b/src/gallium/auxiliary/tgsi/tgsi_dump.c
@@ -33,12 +33,19 @@
 #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;




More information about the mesa-commit mailing list