r600/sfn: fix remapping of deleted attributes

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7142>
This commit is contained in:
Gert Wollny 2020-10-12 22:12:55 +02:00 committed by Marge Bot
parent f79b7fcf7c
commit 9eda7176e3
2 changed files with 18 additions and 4 deletions

View File

@ -51,7 +51,8 @@ VertexShaderFromNir::VertexShaderFromNir(r600_pipe_shader *sh,
m_enabled_stream_buffers_mask(0),
m_so_info(&sel.so),
m_vertex_id(),
m_key(key)
m_key(key),
m_max_attrib(0)
{
// reg 0 is used in the fetch shader
increment_reserved_registers();
@ -77,6 +78,9 @@ bool VertexShaderFromNir::do_process_inputs(nir_variable *input)
if (input->data.location < VERT_ATTRIB_MAX) {
increment_reserved_registers();
if (m_max_attrib < input->data.driver_location)
m_max_attrib = input->data.driver_location;
return true;
}
fprintf(stderr, "r600-NIR-VS: Unimplemented process_inputs for %d\n", input->data.location);
@ -115,6 +119,16 @@ bool VertexShaderFromNir::do_allocate_reserved_registers()
inject_register(0, 1, m_rel_vertex_id, false);
}
m_attribs.resize(4 * m_max_attrib + 4);
for (unsigned i = 0; i < m_max_attrib + 1; ++i) {
for (unsigned k = 0; k < 4; ++k) {
auto gpr = std::make_shared<GPRValue>(i + 1, k);
gpr->set_as_input();
m_attribs[4 * i + k] = gpr;
inject_register(i + 1, k, gpr, false);
}
}
return true;
}
@ -191,9 +205,7 @@ bool VertexShaderFromNir::do_emit_load_deref(const nir_variable *in_var, nir_int
{
if (in_var->data.location < VERT_ATTRIB_MAX) {
for (unsigned i = 0; i < nir_dest_num_components(instr->dest); ++i) {
auto s = new GPRValue(in_var->data.driver_location + 1, i);
s->set_as_input();
auto src = PValue(s);
auto src = m_attribs[4 * in_var->data.driver_location + i];
if (i == 0)
set_input(in_var->data.driver_location, src);

View File

@ -70,9 +70,11 @@ private:
PValue m_instance_id;
PValue m_rel_vertex_id;
PValue m_primitive_id;
std::vector<PGPRValue> m_attribs;
r600_shader_key m_key;
std::unique_ptr<VertexStageExportBase> m_export_processor;
unsigned m_max_attrib;
};
}