diff options
author | Kenneth Graunke <[email protected]> | 2015-01-21 01:51:21 -0800 |
---|---|---|
committer | Kenneth Graunke <[email protected]> | 2015-01-23 14:53:26 -0800 |
commit | d7743bb1c2d5cfe44a018251d21def18eb6d4b97 (patch) | |
tree | 0c5a0ff70771b2492f013260203be71526cdc658 /src/mesa | |
parent | f3e06fcc6add67ed3eeecbce600994ef3220ec1c (diff) |
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 <[email protected]>
Reviewed-by: Jason Ekstrand <[email protected]>
Reviewed-by: Matt Turner <[email protected]>
Diffstat (limited to 'src/mesa')
-rw-r--r-- | src/mesa/drivers/dri/i965/brw_fs_nir.cpp | 32 |
1 files changed, 32 insertions, 0 deletions
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); |