r600/nir: pass array info to r600_shader for sb
Signed-off-by: Gert Wollny <gert.wollny@collabora.com> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/8563>
This commit is contained in:
@@ -240,6 +240,9 @@ bool ShaderFromNir::lower(const nir_shader *shader, r600_pipe_shader *pipe_shade
|
|||||||
sfn_log << SfnLog::trans << "Merge registers\n";
|
sfn_log << SfnLog::trans << "Merge registers\n";
|
||||||
impl->remap_registers();
|
impl->remap_registers();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
impl->get_array_info(pipe_shader->shader);
|
||||||
|
|
||||||
sfn_log << SfnLog::trans << "Finished translating to R600 IR\n";
|
sfn_log << SfnLog::trans << "Finished translating to R600 IR\n";
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
@@ -1164,6 +1164,17 @@ void ShaderFromNirProcessor::append_block(int nesting_change)
|
|||||||
m_output.push_back(InstructionBlock(m_nesting_depth, m_block_number++));
|
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()
|
void ShaderFromNirProcessor::finalize()
|
||||||
{
|
{
|
||||||
do_finalize();
|
do_finalize();
|
||||||
|
@@ -90,6 +90,8 @@ public:
|
|||||||
return m_atomic_base_map[base];
|
return m_atomic_base_map[base];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void get_array_info(r600_shader& shader) const;
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
|
|
||||||
void set_var_address(nir_deref_instr *instr);
|
void set_var_address(nir_deref_instr *instr);
|
||||||
|
@@ -127,6 +127,8 @@ public:
|
|||||||
|
|
||||||
uint32_t sel() const override;
|
uint32_t sel() const override;
|
||||||
|
|
||||||
|
uint32_t mask() const { return m_component_mask; };
|
||||||
|
|
||||||
size_t size() const {return m_values.size();}
|
size_t size() const {return m_values.size();}
|
||||||
|
|
||||||
PValue get_indirect(unsigned index, PValue indirect, unsigned component);
|
PValue get_indirect(unsigned index, PValue indirect, unsigned component);
|
||||||
|
@@ -425,7 +425,9 @@ void ValuePool::allocate_arrays(array_list& arrays)
|
|||||||
|
|
||||||
uint32_t mask = ((1 << a.ncomponents) - 1) << ncomponents;
|
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
|
sfn_log << SfnLog::reg << "Add array at "<< current_index
|
||||||
<< " of size " << a.length << " with " << a.ncomponents
|
<< " of size " << a.length << " with " << a.ncomponents
|
||||||
|
@@ -180,6 +180,9 @@ public:
|
|||||||
|
|
||||||
GPRVector get_temp_vec4();
|
GPRVector get_temp_vec4();
|
||||||
|
|
||||||
|
protected:
|
||||||
|
std::vector<PGPRArray> m_reg_arrays;
|
||||||
|
|
||||||
private:
|
private:
|
||||||
|
|
||||||
unsigned get_ssa_register_index(const nir_ssa_def& ssa) const;
|
unsigned get_ssa_register_index(const nir_ssa_def& ssa) const;
|
||||||
@@ -233,7 +236,6 @@ private:
|
|||||||
|
|
||||||
unsigned m_next_register_index;
|
unsigned m_next_register_index;
|
||||||
|
|
||||||
std::map<unsigned, PGPRArray> m_arrays_map;
|
|
||||||
|
|
||||||
std::map<uint32_t, PValue> m_literals;
|
std::map<uint32_t, PValue> m_literals;
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user