Mesa (master): r600/nir: pass array info to r600_shader for sb

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


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

Author: Gert Wollny <gert.wollny at collabora.com>
Date:   Sun Jan 17 19:10:36 2021 +0100

r600/nir: pass array info to r600_shader for sb

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         |  3 +++
 src/gallium/drivers/r600/sfn/sfn_shader_base.cpp | 11 +++++++++++
 src/gallium/drivers/r600/sfn/sfn_shader_base.h   |  2 ++
 src/gallium/drivers/r600/sfn/sfn_value_gpr.h     |  2 ++
 src/gallium/drivers/r600/sfn/sfn_valuepool.cpp   |  4 +++-
 src/gallium/drivers/r600/sfn/sfn_valuepool.h     |  4 +++-
 6 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/src/gallium/drivers/r600/sfn/sfn_nir.cpp b/src/gallium/drivers/r600/sfn/sfn_nir.cpp
index 7923245dcaf..43443547485 100644
--- a/src/gallium/drivers/r600/sfn/sfn_nir.cpp
+++ b/src/gallium/drivers/r600/sfn/sfn_nir.cpp
@@ -240,6 +240,9 @@ bool ShaderFromNir::lower(const nir_shader *shader, r600_pipe_shader *pipe_shade
       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 e33884aebc6..768745547a4 100644
--- a/src/gallium/drivers/r600/sfn/sfn_shader_base.cpp
+++ b/src/gallium/drivers/r600/sfn/sfn_shader_base.cpp
@@ -1164,6 +1164,17 @@ void ShaderFromNirProcessor::append_block(int nesting_change)
    m_output.push_back(InstructionBlock(m_nesting_depth, m_block_number++));
 }
 
+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();
+   }
+}
+
 void ShaderFromNirProcessor::finalize()
 {
    do_finalize();
diff --git a/src/gallium/drivers/r600/sfn/sfn_shader_base.h b/src/gallium/drivers/r600/sfn/sfn_shader_base.h
index 9f21baed8c1..54b2a14ebf4 100644
--- a/src/gallium/drivers/r600/sfn/sfn_shader_base.h
+++ b/src/gallium/drivers/r600/sfn/sfn_shader_base.h
@@ -90,6 +90,8 @@ public:
       return m_atomic_base_map[base];
    }
 
+   void get_array_info(r600_shader& shader) const;
+
 protected:
 
    void set_var_address(nir_deref_instr *instr);
diff --git a/src/gallium/drivers/r600/sfn/sfn_value_gpr.h b/src/gallium/drivers/r600/sfn/sfn_value_gpr.h
index 671ca8dbbe4..789348875b9 100644
--- a/src/gallium/drivers/r600/sfn/sfn_value_gpr.h
+++ b/src/gallium/drivers/r600/sfn/sfn_value_gpr.h
@@ -127,6 +127,8 @@ public:
 
    uint32_t sel() const override;
 
+   uint32_t mask() const { return m_component_mask; };
+
    size_t size() const {return m_values.size();}
 
    PValue get_indirect(unsigned index, PValue indirect, unsigned component);
diff --git a/src/gallium/drivers/r600/sfn/sfn_valuepool.cpp b/src/gallium/drivers/r600/sfn/sfn_valuepool.cpp
index a790f18820e..a645bb20d5e 100644
--- a/src/gallium/drivers/r600/sfn/sfn_valuepool.cpp
+++ b/src/gallium/drivers/r600/sfn/sfn_valuepool.cpp
@@ -425,7 +425,9 @@ void ValuePool::allocate_arrays(array_list& arrays)
 
       uint32_t mask = ((1 << a.ncomponents) - 1) << ncomponents;
 
-      PValue  array = PValue(new GPRArray(current_index, a.length, mask, ncomponents));
+      PGPRArray array = PGPRArray(new GPRArray(current_index, a.length, mask, ncomponents));
+
+      m_reg_arrays.push_back(array);
 
       sfn_log << SfnLog::reg << "Add array at "<< current_index
               << " of size " << a.length << " with " << a.ncomponents
diff --git a/src/gallium/drivers/r600/sfn/sfn_valuepool.h b/src/gallium/drivers/r600/sfn/sfn_valuepool.h
index f61f6974bf4..4fbf5857144 100644
--- a/src/gallium/drivers/r600/sfn/sfn_valuepool.h
+++ b/src/gallium/drivers/r600/sfn/sfn_valuepool.h
@@ -180,6 +180,9 @@ public:
 
    GPRVector get_temp_vec4();
 
+protected:
+   std::vector<PGPRArray> m_reg_arrays;
+
 private:
 
    unsigned get_ssa_register_index(const nir_ssa_def& ssa) const;
@@ -233,7 +236,6 @@ private:
 
    unsigned m_next_register_index;
 
-   std::map<unsigned, PGPRArray> m_arrays_map;
 
    std::map<uint32_t, PValue> m_literals;
 



More information about the mesa-commit mailing list