From: Kenneth Graunke <kenn...@whitecape.org> Signed-off-by: Kenneth Graunke <kenn...@whitecape.org> --- src/mesa/drivers/dri/i965/brw_fs.cpp | 18 ++++++++++++++++++ src/mesa/drivers/dri/i965/brw_fs.h | 3 +++ src/mesa/drivers/dri/i965/brw_fs_visitor.cpp | 1 + 3 files changed, 22 insertions(+)
diff --git a/src/mesa/drivers/dri/i965/brw_fs.cpp b/src/mesa/drivers/dri/i965/brw_fs.cpp index 12b6d4a..2c7b3ae 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs.cpp @@ -3219,6 +3219,24 @@ fs_visitor::assign_binding_table_offsets() assign_common_binding_table_offsets(next_binding_table_offset); } +void +fs_visitor::calculate_register_pressure() +{ + calculate_live_intervals(); + + int num_instructions = 0; + foreach_list(node, &this->instructions) { + ++num_instructions; + } + + regs_live_at_ip = rzalloc_array(mem_ctx, int, num_instructions); + + for (int reg = 0; reg < virtual_grf_count; reg++) { + for (int ip = virtual_grf_start[reg]; ip <= virtual_grf_end[reg]; ip++) + regs_live_at_ip[ip] += virtual_grf_sizes[reg]; + } +} + bool fs_visitor::run() { diff --git a/src/mesa/drivers/dri/i965/brw_fs.h b/src/mesa/drivers/dri/i965/brw_fs.h index 07360ae..bee8cdf 100644 --- a/src/mesa/drivers/dri/i965/brw_fs.h +++ b/src/mesa/drivers/dri/i965/brw_fs.h @@ -309,6 +309,7 @@ public: void setup_pull_constants(); void invalidate_live_intervals(); void calculate_live_intervals(); + void calculate_register_pressure(); bool opt_algebraic(); bool opt_cse(); bool opt_cse_local(bblock_t *block, exec_list *aeb); @@ -447,6 +448,8 @@ public: int *virtual_grf_end; brw::fs_live_variables *live_intervals; + int *regs_live_at_ip; + /* This is the map from UNIFORM hw_reg + reg_offset as generated by * the visitor to the packed uniform number after * remove_dead_constants() that represents the actual uploaded diff --git a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp index 869b636..c5bacc2 100644 --- a/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp +++ b/src/mesa/drivers/dri/i965/brw_fs_visitor.cpp @@ -2933,6 +2933,7 @@ fs_visitor::fs_visitor(struct brw_context *brw, this->virtual_grf_start = NULL; this->virtual_grf_end = NULL; this->live_intervals = NULL; + this->regs_live_at_ip = NULL; this->params_remap = NULL; this->nr_params_remap = 0; -- 1.8.3.2 _______________________________________________ mesa-dev mailing list mesa-dev@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/mesa-dev