Mesa (master): mesa: added _mesa_postprocess_program() to aid shader debugging

Brian Paul brianp at kemper.freedesktop.org
Wed Jun 17 15:58:40 UTC 2009


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

Author: Brian Paul <brianp at vmware.com>
Date:   Wed Jun 17 07:42:49 2009 -0600

mesa: added _mesa_postprocess_program() to aid shader debugging

---

 src/mesa/shader/program.c |   58 +++++++++++++++++++++++++++++++++++++++++++++
 src/mesa/shader/program.h |    2 +
 2 files changed, 60 insertions(+), 0 deletions(-)

diff --git a/src/mesa/shader/program.c b/src/mesa/shader/program.c
index d270bf9..b56308b 100644
--- a/src/mesa/shader/program.c
+++ b/src/mesa/shader/program.c
@@ -820,3 +820,61 @@ _mesa_find_free_register(const struct gl_program *prog, GLuint regFile)
 
    return -1;
 }
+
+
+
+/**
+ * "Post-process" a GPU program.  This is intended to be used for debugging.
+ * Example actions include no-op'ing instructions or changing instruction
+ * behaviour.
+ */
+void
+_mesa_postprocess_program(GLcontext *ctx, struct gl_program *prog)
+{
+   static const GLfloat white[4] = { 0.5, 0.5, 0.5, 0.5 };
+   GLuint i;
+   GLuint whiteSwizzle;
+   GLint whiteIndex = _mesa_add_unnamed_constant(prog->Parameters,
+                                                 white, 4, &whiteSwizzle);
+
+   for (i = 0; i < prog->NumInstructions; i++) {
+      struct prog_instruction *inst = prog->Instructions + i;
+      const GLuint n = _mesa_num_inst_src_regs(inst->Opcode);
+
+      (void) n;
+
+      if (_mesa_is_tex_instruction(inst->Opcode)) {
+#if 0
+         /* replace TEX/TXP/TXB with MOV */
+         inst->Opcode = OPCODE_MOV;
+         inst->DstReg.WriteMask = WRITEMASK_XYZW;
+         inst->SrcReg[0].Swizzle = SWIZZLE_XYZW;
+         inst->SrcReg[0].Negate = NEGATE_NONE;
+#endif
+
+#if 0
+         /* disable shadow texture mode */
+         inst->TexShadow = 0;
+#endif
+      }
+
+      if (inst->Opcode == OPCODE_TXP) {
+#if 0
+         inst->Opcode = OPCODE_MOV;
+         inst->DstReg.WriteMask = WRITEMASK_XYZW;
+         inst->SrcReg[0].File = PROGRAM_CONSTANT;
+         inst->SrcReg[0].Index = whiteIndex;
+         inst->SrcReg[0].Swizzle = SWIZZLE_XYZW;
+         inst->SrcReg[0].Negate = NEGATE_NONE;
+#endif
+#if 0
+         inst->TexShadow = 0;
+#endif
+#if 0
+         inst->Opcode = OPCODE_TEX;
+         inst->TexShadow = 0;
+#endif
+      }
+
+   }
+}
diff --git a/src/mesa/shader/program.h b/src/mesa/shader/program.h
index 4817616..56a4191 100644
--- a/src/mesa/shader/program.h
+++ b/src/mesa/shader/program.h
@@ -122,6 +122,8 @@ _mesa_combine_programs(GLcontext *ctx,
 extern GLint
 _mesa_find_free_register(const struct gl_program *prog, GLuint regFile);
 
+extern void
+_mesa_postprocess_program(GLcontext *ctx, struct gl_program *prog);
 
 
 #endif /* PROGRAM_H */




More information about the mesa-commit mailing list