fs_generator no longer knows what stage it's generating code for, so we have to set the debug name of the shader from the call site. Signed-off-by: Kristian Høgsberg <krh@bitplanet.net> Reviewed-by: Kenneth Graunke <kenneth@whitecape.org>tags/10.5-branchpoint
@@ -31,8 +31,10 @@ brw_blorp_eu_emitter::brw_blorp_eu_emitter(struct brw_context *brw, | |||
: mem_ctx(ralloc_context(NULL)), | |||
generator(brw, mem_ctx, (void *) rzalloc(mem_ctx, struct brw_wm_prog_key), | |||
(struct brw_stage_prog_data *) rzalloc(mem_ctx, struct brw_wm_prog_data), | |||
NULL, NULL, false, debug_flag) | |||
NULL, NULL, false) | |||
{ | |||
if (debug_flag) | |||
generator.enable_debug("blorp"); | |||
} | |||
brw_blorp_eu_emitter::~brw_blorp_eu_emitter() |
@@ -3716,8 +3716,21 @@ brw_wm_fs_emit(struct brw_context *brw, | |||
prog_data->no_8 = false; | |||
} | |||
fs_generator g(brw, mem_ctx, (void *) key, &prog_data->base, prog, &fp->Base, | |||
v.runtime_check_aads_emit, INTEL_DEBUG & DEBUG_WM); | |||
fs_generator g(brw, mem_ctx, (void *) key, &prog_data->base, prog, | |||
&fp->Base, v.runtime_check_aads_emit); | |||
if (unlikely(INTEL_DEBUG & DEBUG_WM)) { | |||
char *name; | |||
if (prog) | |||
name = ralloc_asprintf(mem_ctx, "%s fragment shader %d", | |||
prog->Label ? prog->Label : "unnamed", | |||
prog->Name); | |||
else | |||
name = ralloc_asprintf(mem_ctx, "fragment program %d", fp->Base.Id); | |||
g.enable_debug(name); | |||
} | |||
if (simd8_cfg) | |||
g.generate_code(simd8_cfg, 8); | |||
if (simd16_cfg) |
@@ -693,10 +693,10 @@ public: | |||
struct brw_stage_prog_data *prog_data, | |||
struct gl_shader_program *shader_prog, | |||
struct gl_program *fp, | |||
bool runtime_check_aads_emit, | |||
bool debug_flag); | |||
bool runtime_check_aads_emit); | |||
~fs_generator(); | |||
void enable_debug(const char *shader_name); | |||
int generate_code(const cfg_t *cfg, int dispatch_width); | |||
const unsigned *get_assembly(unsigned int *assembly_size); | |||
@@ -804,7 +804,8 @@ private: | |||
exec_list discard_halt_patches; | |||
bool runtime_check_aads_emit; | |||
const bool debug_flag; | |||
bool debug_flag; | |||
const char *shader_name; | |||
void *mem_ctx; | |||
}; | |||
@@ -126,13 +126,12 @@ fs_generator::fs_generator(struct brw_context *brw, | |||
struct brw_stage_prog_data *prog_data, | |||
struct gl_shader_program *shader_prog, | |||
struct gl_program *prog, | |||
bool runtime_check_aads_emit, | |||
bool debug_flag) | |||
bool runtime_check_aads_emit) | |||
: brw(brw), key(key), | |||
prog_data(prog_data), shader_prog(shader_prog), | |||
prog(prog), runtime_check_aads_emit(runtime_check_aads_emit), | |||
debug_flag(debug_flag), mem_ctx(mem_ctx) | |||
debug_flag(false), mem_ctx(mem_ctx) | |||
{ | |||
ctx = &brw->ctx; | |||
@@ -1512,6 +1511,13 @@ fs_generator::generate_untyped_surface_read(fs_inst *inst, struct brw_reg dst, | |||
brw_mark_surface_used(prog_data, surf_index.dw1.ud); | |||
} | |||
void | |||
fs_generator::enable_debug(const char *shader_name) | |||
{ | |||
debug_flag = true; | |||
this->shader_name = shader_name; | |||
} | |||
int | |||
fs_generator::generate_code(const cfg_t *cfg, int dispatch_width) | |||
{ | |||
@@ -2015,21 +2021,10 @@ fs_generator::generate_code(const cfg_t *cfg, int dispatch_width) | |||
int after_size = p->next_insn_offset - start_offset; | |||
if (unlikely(debug_flag)) { | |||
if (shader_prog) { | |||
fprintf(stderr, | |||
"Native code for %s fragment shader %d (SIMD%d dispatch):\n", | |||
shader_prog->Label ? shader_prog->Label : "unnamed", | |||
shader_prog->Name, dispatch_width); | |||
} else if (prog) { | |||
fprintf(stderr, | |||
"Native code for fragment program %d (SIMD%d dispatch):\n", | |||
prog->Id, dispatch_width); | |||
} else { | |||
fprintf(stderr, "Native code for blorp program (SIMD%d dispatch):\n", | |||
dispatch_width); | |||
} | |||
fprintf(stderr, "SIMD%d shader: %d instructions. %d loops. Compacted %d to %d" | |||
" bytes (%.0f%%)\n", | |||
fprintf(stderr, "Native code for %s\n" | |||
"SIMD%d shader: %d instructions. %d loops. Compacted %d to %d" | |||
" bytes (%.0f%%)\n", | |||
shader_name, | |||
dispatch_width, before_size / 16, loop_count, before_size, after_size, | |||
100.0f * (before_size - after_size) / before_size); | |||