mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-02 01:28:07 +02:00
r600/sfn: Don't tag mem-ring and stream instructions as exports
Export instructions allow burst writes, so it makes send to try
to allocate consecutive registers, but for ring writes we don't
schedule the outputs correctly to exploit this, so for now
don't mark these instructions as export to let the RA restart
picking colors.
When the scheduler starts to emit the ring writes in the right order
to allow for bust writes we might revisit this.
This fixes
spec@glsl-1.50@execution@variable-indexing@gs-output-array-vec4-index-wr
Fixes: 79ca456b48
r600/sfn: rewrite NIR backend
Related: https://gitlab.freedesktop.org/mesa/mesa/-/issues/6975
Signed-off-by: Gert Wollny <gert.wollny@collabora.com>
Reviewed-by: Filip Gawin <filip@gawin.net>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/18212>
This commit is contained in:
parent
3a0f085837
commit
fd71cd0b6a
2 changed files with 3 additions and 3 deletions
|
|
@ -308,14 +308,14 @@ void LiveRangeInstrVisitor::visit(StreamOutInstr *instr)
|
|||
{
|
||||
sfn_log << SfnLog::merge << "Visit " << *instr << "\n";
|
||||
auto src = instr->value();
|
||||
record_read(src, LiveRangeEntry::use_export);
|
||||
record_read(src, LiveRangeEntry::use_unspecified);
|
||||
}
|
||||
|
||||
void LiveRangeInstrVisitor::visit(MemRingOutInstr *instr)
|
||||
{
|
||||
sfn_log << SfnLog::merge << "Visit " << *instr << "\n";
|
||||
auto src = instr->value();
|
||||
record_read(src, LiveRangeEntry::use_export);
|
||||
record_read(src, LiveRangeEntry::use_unspecified);
|
||||
|
||||
auto idx = instr->export_index();
|
||||
if (idx && idx->as_register())
|
||||
|
|
|
|||
|
|
@ -329,7 +329,7 @@ void BlockSheduler::schedule_block(Block& in_block, Shader::ShaderBlocks& out_bl
|
|||
if (!m_current_block->lds_group_active()) {
|
||||
if (last_shed != sched_free && memops_ready.size() > 8)
|
||||
current_shed = sched_free;
|
||||
else if (mem_ring_writes_ready.size() > 5)
|
||||
else if (mem_ring_writes_ready.size() > 15)
|
||||
current_shed = sched_mem_ring;
|
||||
else if (rat_instr_ready.size() > 3)
|
||||
current_shed = sched_rat;
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue