mesa: added _mesa_postprocess_program() to aid shader debugging
This commit is contained in:
@@ -820,3 +820,61 @@ _mesa_find_free_register(const struct gl_program *prog, GLuint regFile)
|
|||||||
|
|
||||||
return -1;
|
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
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
|
@@ -122,6 +122,8 @@ _mesa_combine_programs(GLcontext *ctx,
|
|||||||
extern GLint
|
extern GLint
|
||||||
_mesa_find_free_register(const struct gl_program *prog, GLuint regFile);
|
_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 */
|
#endif /* PROGRAM_H */
|
||||||
|
Reference in New Issue
Block a user