r600/sfn: fix remapping of deleted attributes
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/7142>
This commit is contained in:
parent
f79b7fcf7c
commit
9eda7176e3
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
};
|
||||
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue