[Mesa-dev] [PATCH] mesa/st: fix array indices off-by-one error in remapping
Dave Airlie
airlied at gmail.com
Wed Aug 15 19:50:34 UTC 2018
Reviewed-by: Dave Airlie <airlied at redhat.com>
On Thu, 16 Aug 2018 at 03:31, Gert Wollny <gw.fossdev at gmail.com> wrote:
>
> When moving the array sizes from the old list to the new one it was
> not taken into account that the array indices start with one, but the
> array_size array started at index zero, which resulted in incorrect array
> sizes when arrays were merged. Correct this by copying the array_size
> values of the retained arrays with an offset of -1.
>
> Also fix whitespaces for the replaced lines.
>
> Fixes: d8c2119f9b0b257a23ceb398f6d0d78da916417e
> mesa/st/glsl_to_tgsi: Expose array live range tracking and merging
> Signed-off-by: Gert Wollny <gw.fossdev at gmail.com>
> ---
> src/mesa/state_tracker/st_glsl_to_tgsi.cpp | 2 +-
> src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp | 10 +++++-----
> 2 files changed, 6 insertions(+), 6 deletions(-)
>
> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> index 2b9183abbb..bbb28b0d7b 100644
> --- a/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi.cpp
> @@ -5601,7 +5601,7 @@ glsl_to_tgsi_visitor::merge_registers(void)
> 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]);
> + arr_live_ranges[i] = array_live_range(i+1, this->array_sizes[i]);
> }
>
>
> diff --git a/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp b/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp
> index f95b1fac7b..1431824369 100644
> --- a/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp
> +++ b/src/mesa/state_tracker/st_glsl_to_tgsi_array_merge.cpp
> @@ -587,10 +587,10 @@ int remap_arrays(int narrays, unsigned *array_sizes,
> /* re-calculate arrays */
> #if __cplusplus < 201402L
> int *idx_map = new int[narrays + 1];
> - unsigned *old_sizes = new unsigned[narrays + 1];
> + unsigned *old_sizes = new unsigned[narrays];
> #else
> unique_ptr<int[]> idx_map = make_unique<int[]>(narrays + 1);
> - unique_ptr<unsigned[]> old_sizes = make_unique<unsigned[]>(narrays + 1);
> + unique_ptr<unsigned[]> old_sizes = make_unique<unsigned[]>(narrays);
> #endif
>
> memcpy(&old_sizes[0], &array_sizes[0], sizeof(unsigned) * narrays);
> @@ -599,9 +599,9 @@ int remap_arrays(int narrays, unsigned *array_sizes,
> int new_narrays = 0;
> for (int i = 1; i <= narrays; ++i) {
> if (!map[i].is_valid()) {
> - ++new_narrays;
> - idx_map[i] = new_narrays;
> - array_sizes[new_narrays] = old_sizes[i];
> + ++new_narrays;
> + array_sizes[new_narrays-1] = old_sizes[i-1];
> + idx_map[i] = new_narrays;
> }
> }
>
> --
> 2.16.4
>
More information about the mesa-dev
mailing list