From: Gert Wollny Date: Sun, 17 Jan 2021 18:10:36 +0000 (+0100) Subject: r600/nir: pass array info to r600_shader for sb X-Git-Tag: upstream/21.2.3~9290 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=7717c1090a57e107a3652b0e38bd39e0a82d18e7;p=platform%2Fupstream%2Fmesa.git r600/nir: pass array info to r600_shader for sb Signed-off-by: Gert Wollny Part-of: --- diff --git a/src/gallium/drivers/r600/sfn/sfn_nir.cpp b/src/gallium/drivers/r600/sfn/sfn_nir.cpp index 7923245..4344354 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 e33884a..7687455 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 9f21bae..54b2a14 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 671ca8d..7893488 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 a790f18..a645bb2 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 f61f697..4fbf585 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 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 m_arrays_map; std::map m_literals;