Mesa (master): r600/sfn: update shader array info

GitLab Mirror gitlab-mirror at kemper.freedesktop.org
Wed Jan 20 12:19:15 UTC 2021


Module: Mesa
Branch: master
Commit: 9fa48c0207dbc4972bef39b08e3da31dcce82320
URL:    http://cgit.freedesktop.org/mesa/mesa/commit/?id=9fa48c0207dbc4972bef39b08e3da31dcce82320

Author: Gert Wollny <gert.wollny at collabora.com>
Date:   Sun Jan 17 20:58:32 2021 +0100

r600/sfn: update shader array info

Signed-off-by: Gert Wollny <gert.wollny at collabora.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8563>

---

 src/gallium/drivers/r600/sfn/sfn_nir.cpp         |  4 ++--
 src/gallium/drivers/r600/sfn/sfn_shader_base.cpp | 20 +++++++++++++++-----
 2 files changed, 17 insertions(+), 7 deletions(-)

diff --git a/src/gallium/drivers/r600/sfn/sfn_nir.cpp b/src/gallium/drivers/r600/sfn/sfn_nir.cpp
index 43443547485..5ce326ec29e 100644
--- a/src/gallium/drivers/r600/sfn/sfn_nir.cpp
+++ b/src/gallium/drivers/r600/sfn/sfn_nir.cpp
@@ -236,13 +236,13 @@ bool ShaderFromNir::lower(const nir_shader *shader, r600_pipe_shader *pipe_shade
    sfn_log << SfnLog::trans << "Finalize\n";
    impl->finalize();
 
+   impl->get_array_info(pipe_shader->shader);
+
    if (!sfn_log.has_debug_flag(SfnLog::nomerge)) {
       sfn_log << SfnLog::trans << "Merge registers\n";
       impl->remap_registers();
    }
 
-   impl->get_array_info(pipe_shader->shader);
-
    sfn_log << SfnLog::trans << "Finished translating to R600 IR\n";
    return true;
 }
diff --git a/src/gallium/drivers/r600/sfn/sfn_shader_base.cpp b/src/gallium/drivers/r600/sfn/sfn_shader_base.cpp
index 768745547a4..fdd548d305e 100644
--- a/src/gallium/drivers/r600/sfn/sfn_shader_base.cpp
+++ b/src/gallium/drivers/r600/sfn/sfn_shader_base.cpp
@@ -168,6 +168,13 @@ static void remap_shader_info(r600_shader& sh_info,
                               std::vector<rename_reg_pair>& map,
                               UNUSED ValueMap& values)
 {
+   for (unsigned i = 0; i < sh_info.num_arrays; ++i) {
+      auto new_index = map[sh_info.arrays[i].gpr_start];
+      if (new_index.valid)
+         sh_info.arrays[i].gpr_start = new_index.new_reg;
+      map[sh_info.arrays[i].gpr_start].used = true;
+   }
+
    for (unsigned i = 0; i < sh_info.ninput; ++i) {
       sfn_log << SfnLog::merge << "Input " << i << " gpr:" << sh_info.input[i].gpr
               << " of map.size()\n";
@@ -1167,11 +1174,14 @@ void ShaderFromNirProcessor::append_block(int nesting_change)
 void ShaderFromNirProcessor::get_array_info(r600_shader& shader) const
 {
    shader.num_arrays = m_reg_arrays.size();
-   shader.arrays = (r600_shader_array *)calloc(shader.num_arrays, sizeof(r600_shader_array));
-   for (int i = 0; i < shader.num_arrays; ++i) {
-      shader.arrays[i].comp_mask = m_reg_arrays[i]->mask();
-      shader.arrays[i].gpr_start = m_reg_arrays[i]->sel();
-      shader.arrays[i].gpr_count = m_reg_arrays[i]->size();
+   if (shader.num_arrays) {
+      shader.arrays = (r600_shader_array *)calloc(shader.num_arrays, sizeof(r600_shader_array));
+      for (unsigned i = 0; i < shader.num_arrays; ++i) {
+         shader.arrays[i].comp_mask = m_reg_arrays[i]->mask();
+         shader.arrays[i].gpr_start = m_reg_arrays[i]->sel();
+         shader.arrays[i].gpr_count = m_reg_arrays[i]->size();
+      }
+      shader.indirect_files |= (1 << TGSI_FILE_TEMPORARY);
    }
 }
 



More information about the mesa-commit mailing list