r600/sfn: update shader array info
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:
@@ -236,13 +236,13 @@ bool ShaderFromNir::lower(const nir_shader *shader, r600_pipe_shader *pipe_shade
|
|||||||
sfn_log << SfnLog::trans << "Finalize\n";
|
sfn_log << SfnLog::trans << "Finalize\n";
|
||||||
impl->finalize();
|
impl->finalize();
|
||||||
|
|
||||||
|
impl->get_array_info(pipe_shader->shader);
|
||||||
|
|
||||||
if (!sfn_log.has_debug_flag(SfnLog::nomerge)) {
|
if (!sfn_log.has_debug_flag(SfnLog::nomerge)) {
|
||||||
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;
|
||||||
}
|
}
|
||||||
|
@@ -168,6 +168,13 @@ static void remap_shader_info(r600_shader& sh_info,
|
|||||||
std::vector<rename_reg_pair>& map,
|
std::vector<rename_reg_pair>& map,
|
||||||
UNUSED ValueMap& values)
|
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) {
|
for (unsigned i = 0; i < sh_info.ninput; ++i) {
|
||||||
sfn_log << SfnLog::merge << "Input " << i << " gpr:" << sh_info.input[i].gpr
|
sfn_log << SfnLog::merge << "Input " << i << " gpr:" << sh_info.input[i].gpr
|
||||||
<< " of map.size()\n";
|
<< " of map.size()\n";
|
||||||
@@ -1167,11 +1174,14 @@ void ShaderFromNirProcessor::append_block(int nesting_change)
|
|||||||
void ShaderFromNirProcessor::get_array_info(r600_shader& shader) const
|
void ShaderFromNirProcessor::get_array_info(r600_shader& shader) const
|
||||||
{
|
{
|
||||||
shader.num_arrays = m_reg_arrays.size();
|
shader.num_arrays = m_reg_arrays.size();
|
||||||
shader.arrays = (r600_shader_array *)calloc(shader.num_arrays, sizeof(r600_shader_array));
|
if (shader.num_arrays) {
|
||||||
for (int i = 0; i < shader.num_arrays; ++i) {
|
shader.arrays = (r600_shader_array *)calloc(shader.num_arrays, sizeof(r600_shader_array));
|
||||||
shader.arrays[i].comp_mask = m_reg_arrays[i]->mask();
|
for (unsigned i = 0; i < shader.num_arrays; ++i) {
|
||||||
shader.arrays[i].gpr_start = m_reg_arrays[i]->sel();
|
shader.arrays[i].comp_mask = m_reg_arrays[i]->mask();
|
||||||
shader.arrays[i].gpr_count = m_reg_arrays[i]->size();
|
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);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Reference in New Issue
Block a user