From: Kenneth Graunke Date: Wed, 21 Jan 2015 09:51:21 +0000 (-0800) Subject: i965/nir: Report NIR instruction counts (in SSA form) via KHR_debug. X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=d7743bb1c2d5cfe44a018251d21def18eb6d4b97;p=mesa.git i965/nir: Report NIR instruction counts (in SSA form) via KHR_debug. This allows us to count NIR instructions via shader-db. Use "run" as normal. The results file will contain both NIR and assembly. Then, to generate a NIR report: ./report.py <(grep NIR results/foo) <(grep NIR results/bar) Or, to generate an i965 report: ./report.py <(grep -v NIR results/foo) <(grep -v NIR results/bar) Signed-off-by: Kenneth Graunke Reviewed-by: Jason Ekstrand Reviewed-by: Matt Turner --- diff --git a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp index 2d303210190..0eb137fe2d3 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_nir.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_nir.cpp @@ -49,6 +49,28 @@ nir_optimize(nir_shader *nir) } while (progress); } +static bool +count_nir_instrs_in_block(nir_block *block, void *state) +{ + int *count = (int *) state; + nir_foreach_instr(block, instr) { + *count = *count + 1; + } + return true; +} + +static int +count_nir_instrs(nir_shader *nir) +{ + int count = 0; + nir_foreach_overload(nir, overload) { + if (!overload->impl) + continue; + nir_foreach_block(overload->impl, count_nir_instrs_in_block, &count); + } + return count; +} + void fs_visitor::emit_nir_code() { @@ -99,6 +121,16 @@ fs_visitor::emit_nir_code() nir_print_shader(nir, stderr); } + if (dispatch_width == 8) { + static GLuint msg_id = 0; + _mesa_gl_debug(&brw->ctx, &msg_id, + MESA_DEBUG_SOURCE_SHADER_COMPILER, + MESA_DEBUG_TYPE_OTHER, + MESA_DEBUG_SEVERITY_NOTIFICATION, + "FS NIR shader: %d inst\n", + count_nir_instrs(nir)); + } + nir_convert_from_ssa(nir); nir_validate_shader(nir); nir_lower_vec_to_movs(nir);