diff options
Diffstat (limited to 'common/recipes-graphics/mesa/mesa/0012-mesa-st-glsl_to_tgsi-Expose-array-live-range-trackin.patch')
-rw-r--r-- | common/recipes-graphics/mesa/mesa/0012-mesa-st-glsl_to_tgsi-Expose-array-live-range-trackin.patch | 204 |
1 files changed, 0 insertions, 204 deletions
diff --git a/common/recipes-graphics/mesa/mesa/0012-mesa-st-glsl_to_tgsi-Expose-array-live-range-trackin.patch b/common/recipes-graphics/mesa/mesa/0012-mesa-st-glsl_to_tgsi-Expose-array-live-range-trackin.patch deleted file mode 100644 index 0114c54f..00000000 --- a/common/recipes-graphics/mesa/mesa/0012-mesa-st-glsl_to_tgsi-Expose-array-live-range-trackin.patch +++ /dev/null @@ -1,204 +0,0 @@ -From 3669f47f03dcf696188294da78def040cffa77a2 Mon Sep 17 00:00:00 2001 -From: Gert Wollny <gw.fossdev@gmail.com> -Date: Fri, 9 Feb 2018 11:11:16 +0100 -Subject: [PATCH 12/13] mesa/st/glsl_to_tgsi: Expose array live range tracking - and merging - -Rename get_temp_registers_required_live_ranges to get_required_live_ranges and -change its interface to also accomodate the live range tracking for arrays. -Remove the placeholder arrays in this function and tie the array merging. - -This makes the register spilling in piglit - glsl-1.30/execution/fs-multiple-large-local-arrays -on r600/barts unneccessary. - -Bugzilla: https://bugs.freedesktop.org/show_bug.cgi?id=100200 -Signed-off-by: Gert Wollny <gw.fossdev@gmail.com> ---- - src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 25 +++++++++++++++++----- - .../state_tracker/st_glsl_to_tgsi_temprename.cpp | 13 +++++------ - .../state_tracker/st_glsl_to_tgsi_temprename.h | 19 ++++++++++------ - src/mesa/state_tracker/tests/st_tests_common.cpp | 19 ++++++++-------- - 4 files changed, 48 insertions(+), 28 deletions(-) - -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp -index 163f334..c58fac0 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp -@@ -5467,25 +5467,40 @@ glsl_to_tgsi_visitor::split_arrays(void) - next_array = n_remaining_arrays; - } - --/* Merges temporary registers together where possible to reduce the number of -- * registers needed to run a program. -+/* Merges temporary registers and arrays together where possible to reduce -+ * the number of registers needed to run a program. - * - * Produces optimal code only after copy propagation and dead code elimination - * have been run. */ - void - glsl_to_tgsi_visitor::merge_registers(void) - { -+ struct array_live_range *arr_live_ranges = NULL; -+ - struct register_live_range *reg_live_ranges = - rzalloc_array(mem_ctx, struct register_live_range, this->next_temp); - -- if (get_temp_registers_required_live_ranges(reg_live_ranges, &this->instructions, -- this->next_temp, reg_live_ranges)) { -+ if (this->next_array > 0) { -+ arr_live_ranges = new array_live_range[this->next_array]; -+ for (unsigned i = 0; i < this->next_array; ++i) -+ arr_live_ranges[i] = array_live_range(i+1, this->array_sizes[i+1]); -+ } -+ -+ -+ if (get_required_live_ranges(reg_live_ranges, &this->instructions, -+ this->next_temp, reg_live_ranges, -+ this->next_array, arr_live_ranges)) { - struct rename_reg_pair *renames = - rzalloc_array(reg_live_ranges, struct rename_reg_pair, this->next_temp); - get_temp_registers_remapping(reg_live_ranges, this->next_temp, - reg_live_ranges, renames); - rename_temp_registers(renames); -- ralloc_free(renames); -+ -+ this->next_array = merge_arrays(this->next_array, this->array_sizes, -+ &this->instructions, arr_live_ranges); -+ -+ if (arr_live_ranges) -+ delete[] arr_live_ranges; - } - ralloc_free(reg_live_ranges); - } -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -index e276471..eafe4cd 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.cpp -@@ -1102,12 +1102,13 @@ static void dump_instruction(ostream& os, int line, prog_scope *scope, - const glsl_to_tgsi_instruction& inst); - #endif - --/* Scan the program and estimate the required register live ranges. -- * live_ranges must be pre-allocated. -+/* Scan the program and estimate the required register and array live ranges. -+ * The *live_ranges must be pre-allocated. - */ - bool --get_temp_registers_required_live_ranges(void *mem_ctx, exec_list *instructions, -- int ntemps, struct register_live_range *register_live_ranges) -+get_required_live_ranges(void *mem_ctx, exec_list *instructions, int ntemps, -+ struct register_live_range *register_live_ranges, -+ int narrays, struct array_live_range *array_live_ranges) - { - int line = 0; - int loop_id = 1; -@@ -1116,10 +1117,6 @@ get_temp_registers_required_live_ranges(void *mem_ctx, exec_list *instructions, - bool is_at_end = false; - int n_scopes = 1; - -- /* Placeholder to make the reladdr tests pass, will be removed with the next patch. */ -- int narrays = 2; -- struct array_live_range array_live_ranges[3]; -- - /* Count scopes to allocate the needed space without the need for - * re-allocation - */ -diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.h b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.h -index 86c2158..e0dbc3d 100644 ---- a/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.h -+++ b/src/mesa/state_tracker/st_glsl_to_tgsi_temprename.h -@@ -24,7 +24,7 @@ - #ifndef MESA_GLSL_TO_TGSI_TEMPRENAME_H - #define MESA_GLSL_TO_TGSI_TEMPRENAME_H - --#include "st_glsl_to_tgsi_private.h" -+#include "st_glsl_to_tgsi_array_merge.h" - - /** Storage to record the required live range of a temporary register - * begin == end == -1 indicates that the register can be reused without -@@ -38,9 +38,9 @@ struct register_live_range { - int end; - }; - --/** Evaluates the required live ranges of temporary registers in a shader. -- * The live range estimation can only be run sucessfully if the shader doesn't -- * call a subroutine. -+/** Evaluates the required live ranges of temporary registers and arrays in a -+ * shader. The live range estimation can only be run sucessfully if the shader -+ * doesn't call a subroutine. - * @param[in] mem_ctx a memory context that can be used with the ralloc_* - * functions - * @param[in] instructions the shader to be anlzyed -@@ -50,12 +50,19 @@ struct register_live_range { - * point to allocated memory that can hold ntemps register_live_range - * structures. On output the live ranges contains the live ranges for - * the registers with the exception of TEMP[0] -+ * @param[in] narrays number of array sreserved for this shader -+ * @param[in,out] arr_live_ranges memory location to store the estimated required -+ * live ranges for each array. The parameter must point to allocated memory -+ * that can hold narrays array_live_range structures. On output the live -+ * ranges contains the live ranges for the registers with the exception of -+ * ARRAY[0]. - * @returns: true if the lifetimes were estimated, false if not (i.e. if a - * subroutine was called). - */ - bool --get_temp_registers_required_live_ranges(void *mem_ctx, exec_list *instructions, -- int ntemps, struct register_live_range *register_live_ranges); -+get_required_live_ranges(void *mem_ctx, exec_list *instructions, -+ int ntemps, struct register_live_range *register_live_ranges, -+ int narrays, array_live_range *array_live_ranges); - - /** Estimate the merge remapping of the registers. - * @param[in] mem_ctx a memory context that can be used with the ralloc_* -diff --git a/src/mesa/state_tracker/tests/st_tests_common.cpp b/src/mesa/state_tracker/tests/st_tests_common.cpp -index f1e4a83..33d669d 100644 ---- a/src/mesa/state_tracker/tests/st_tests_common.cpp -+++ b/src/mesa/state_tracker/tests/st_tests_common.cpp -@@ -409,11 +409,11 @@ LifetimeEvaluatorTest::run(const vector<FakeCodeline>& code, bool& success) - { - FakeShader shader(code); - lifetime_result result(shader.get_num_temps()); -- -+ vector <array_live_range> arr(10); - success = -- get_temp_registers_required_live_ranges(mem_ctx, shader.get_program(mem_ctx), -+ get_required_live_ranges(mem_ctx, shader.get_program(mem_ctx), - shader.get_num_temps(), -- &result[0]); -+ &result[0], 9, &arr[0]); - - return result; - } -@@ -422,11 +422,11 @@ void LifetimeEvaluatorTest::run(const vector<FakeCodeline>& code, const temp_lt_ - { - FakeShader shader(code); - lifetime_result result(shader.get_num_temps()); -- -+ vector <array_live_range> arr(10); - bool success = -- get_temp_registers_required_live_ranges(mem_ctx, shader.get_program(mem_ctx), -+ get_required_live_ranges(mem_ctx, shader.get_program(mem_ctx), - shader.get_num_temps(), -- &result[0]); -+ &result[0], 9, &arr[0]); - ASSERT_TRUE(success); - ASSERT_EQ(result.size(), e.size()); - check(result, e); -@@ -478,8 +478,9 @@ void RegisterLifetimeAndRemappingTest::run(const vector<FakeCodeline>& code, - { - FakeShader shader(code); - std::vector<register_live_range> lt(shader.get_num_temps()); -- -- get_temp_registers_required_live_ranges(mem_ctx, shader.get_program(mem_ctx), -- shader.get_num_temps(), <[0]); -+ vector <array_live_range> arr(10); -+ get_required_live_ranges(mem_ctx, shader.get_program(mem_ctx), -+ shader.get_num_temps(), <[0], -+ 9, &arr[0]); - this->run(lt, expect); - } --- -2.7.4 - |