mesa: added _mesa_postprocess_program() to aid shader debugging

This commit is contained in:
Brian Paul
2009-06-17 07:42:49 -06:00
parent f806a03361
commit ec6ad7ba3c
2 changed files with 60 additions and 0 deletions

View File

@@ -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
}
}
}

View File

@@ -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 */