Previously, vec4_visitor::run() was responsible for calling reg_allocate() right before generate_code(). However, since there is no reason for run() to do any further manipulation of the instructions between calling reg_allocate() and generate_code(), it's just as simple to have generate_code() call reg_allocate().
This helps pave the way for separating the IR visiting parts of vec4_visitor 9which include run()) from the code generation parts (which include generate_code() and register_allocate()) by reducing the number of function calls between the two parts. --- src/mesa/drivers/dri/i965/brw_vec4.h | 2 +- src/mesa/drivers/dri/i965/brw_vec4_emit.cpp | 18 ++++++++++-------- 2 files changed, 11 insertions(+), 9 deletions(-) diff --git a/src/mesa/drivers/dri/i965/brw_vec4.h b/src/mesa/drivers/dri/i965/brw_vec4.h index c546235..3e30514 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4.h +++ b/src/mesa/drivers/dri/i965/brw_vec4.h @@ -506,7 +506,7 @@ public: bool try_emit_sat(ir_expression *ir); void resolve_ud_negate(src_reg *reg); - void generate_code(); + int generate_code(int first_non_payload_grf); void generate_vs_instruction(vec4_instruction *inst, struct brw_reg dst, struct brw_reg *src); diff --git a/src/mesa/drivers/dri/i965/brw_vec4_emit.cpp b/src/mesa/drivers/dri/i965/brw_vec4_emit.cpp index 81e7ab7..284cb86 100644 --- a/src/mesa/drivers/dri/i965/brw_vec4_emit.cpp +++ b/src/mesa/drivers/dri/i965/brw_vec4_emit.cpp @@ -657,18 +657,13 @@ vec4_visitor::run() return false; int first_non_payload_grf = setup_payload(); - prog_data->total_grf = reg_allocate(first_non_payload_grf); - - if (failed) - return false; - - generate_code(); + prog_data->total_grf = generate_code(first_non_payload_grf); return !failed; } -void -vec4_visitor::generate_code() +int +vec4_visitor::generate_code(int first_non_payload_grf) { int last_native_inst = 0; const char *last_annotation_string = NULL; @@ -683,6 +678,11 @@ vec4_visitor::generate_code() brw_set_access_mode(p, BRW_ALIGN_16); + int total_grf = reg_allocate(first_non_payload_grf); + + if (failed) + return 0; + if (unlikely(INTEL_DEBUG & DEBUG_VS)) { printf("Native code for vertex shader %d:\n", prog->Name); } @@ -906,6 +906,8 @@ vec4_visitor::generate_code() } } } + + return total_grf; } extern "C" { -- 1.7.6.4 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev