i965: Refactor debug dumping of GLSL IR.

This was only going to get worse when tesselation shows up, and was
causing too much extra duplication in my stderr changes coming up.

Reviewed-by: Ian Romanick <ian.d.romanick@intel.com>
Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>
Reviewed-by: Matt Turner <mattst88@gmail.com>
This commit is contained in:
Eric Anholt 2014-02-20 18:23:52 -08:00
parent 9ac9d133ed
commit f28c920865
5 changed files with 29 additions and 27 deletions

View File

@ -3519,17 +3519,8 @@ brw_wm_fs_emit(struct brw_context *brw, struct brw_wm_compile *c,
if (prog)
shader = (brw_shader *) prog->_LinkedShaders[MESA_SHADER_FRAGMENT];
if (unlikely(INTEL_DEBUG & DEBUG_WM)) {
if (prog) {
printf("GLSL IR for native fragment shader %d:\n", prog->Name);
_mesa_print_ir(shader->base.ir, NULL);
printf("\n\n");
} else {
printf("ARB_fragment_program %d ir for native fragment shader\n",
fp->Base.Id);
_mesa_print_program(&fp->Base);
}
}
if (unlikely(INTEL_DEBUG & DEBUG_WM))
brw_dump_ir(brw, "fragment", prog, &shader->base, &fp->Base);
/* Now the main event: Visit the shader IR and generate our FS IR for it.
*/

View File

@ -34,10 +34,12 @@
#include "main/enums.h"
#include "main/shaderobj.h"
#include "program/prog_parameter.h"
#include "program/prog_print.h"
#include "program/program.h"
#include "program/programopt.h"
#include "tnl/tnl.h"
#include "glsl/ralloc.h"
#include "glsl/ir.h"
#include "brw_context.h"
#include "brw_wm.h"
@ -583,3 +585,19 @@ brw_stage_prog_data_free(const void *p)
ralloc_free(prog_data->param);
ralloc_free(prog_data->pull_param);
}
void
brw_dump_ir(struct brw_context *brw, const char *stage,
struct gl_shader_program *shader_prog,
struct gl_shader *shader, struct gl_program *prog)
{
if (shader_prog) {
printf("GLSL IR for native %s shader %d:\n", stage, shader_prog->Name);
_mesa_print_ir(shader->ir, NULL);
printf("\n\n");
} else {
printf("ARB_%s_program %d ir for native %s shader\n",
stage, prog->Id, stage);
_mesa_print_program(prog);
}
}

View File

@ -87,6 +87,11 @@ brw_stage_prog_data_compare(const struct brw_stage_prog_data *a,
void
brw_stage_prog_data_free(const void *prog_data);
void
brw_dump_ir(struct brw_context *brw, const char *stage,
struct gl_shader_program *shader_prog,
struct gl_shader *shader, struct gl_program *prog);
#ifdef __cplusplus
} /* extern "C" */
#endif

View File

@ -1663,17 +1663,8 @@ brw_vs_emit(struct brw_context *brw,
if (prog)
shader = (brw_shader *) prog->_LinkedShaders[MESA_SHADER_VERTEX];
if (unlikely(INTEL_DEBUG & DEBUG_VS)) {
if (prog) {
printf("GLSL IR for native vertex shader %d:\n", prog->Name);
_mesa_print_ir(shader->base.ir, NULL);
printf("\n\n");
} else {
printf("ARB_vertex_program %d for native vertex shader\n",
c->vp->program.Base.Id);
_mesa_print_program(&c->vp->program.Base);
}
}
if (unlikely(INTEL_DEBUG & DEBUG_VS))
brw_dump_ir(brw, "vertex", prog, &shader->base, &c->vp->program.Base);
vec4_vs_visitor v(brw, c, prog_data, prog, shader, mem_ctx);
if (!v.run()) {

View File

@ -588,11 +588,8 @@ brw_gs_emit(struct brw_context *brw,
struct brw_shader *shader =
(brw_shader *) prog->_LinkedShaders[MESA_SHADER_GEOMETRY];
if (unlikely(INTEL_DEBUG & DEBUG_GS)) {
printf("GLSL IR for native geometry shader %d:\n", prog->Name);
_mesa_print_ir(shader->base.ir, NULL);
printf("\n\n");
}
if (unlikely(INTEL_DEBUG & DEBUG_GS))
brw_dump_ir(brw, "geometry", prog, &shader->base, NULL);
/* Compile the geometry shader in DUAL_OBJECT dispatch mode, if we can do
* so without spilling. If the GS invocations count > 1, then we can't use