mirror of
https://gitlab.freedesktop.org/mesa/mesa.git
synced 2026-05-08 09:08:10 +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:79ca456b48r600/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> (cherry picked from commitfd71cd0b6a)
This commit is contained in:
parent
7bcd2e6767
commit
36a66a3124
3 changed files with 4 additions and 4 deletions
|
|
@ -10318,7 +10318,7 @@
|
|||
"description": "r600/sfn: Don't tag mem-ring and stream instructions as exports",
|
||||
"nominated": true,
|
||||
"nomination_type": 1,
|
||||
"resolution": 0,
|
||||
"resolution": 1,
|
||||
"main_sha": null,
|
||||
"because_sha": "79ca456b4837b3bc21cf9ef3c03c505c4b4909f6"
|
||||
},
|
||||
|
|
|
|||
|
|
@ -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