mirror of https://github.com/RPCS3/rpcs3.git
rsx: Asynchronously flush the pipelines when handing ZCULL memory access violations
This commit is contained in:
parent
0e1333ed5f
commit
4e6be9172a
|
@ -1070,6 +1070,11 @@ namespace rsx
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (m_eng_interrupt_mask & rsx::pipe_flush_interrupt)
|
||||||
|
{
|
||||||
|
sync();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
std::array<u32, 4> thread::get_color_surface_addresses() const
|
std::array<u32, 4> thread::get_color_surface_addresses() const
|
||||||
|
@ -2612,6 +2617,8 @@ namespace rsx
|
||||||
|
|
||||||
void thread::sync()
|
void thread::sync()
|
||||||
{
|
{
|
||||||
|
m_eng_interrupt_mask.clear(rsx::pipe_flush_interrupt);
|
||||||
|
|
||||||
if (zcull_ctrl->has_pending())
|
if (zcull_ctrl->has_pending())
|
||||||
{
|
{
|
||||||
zcull_ctrl->sync(this);
|
zcull_ctrl->sync(this);
|
||||||
|
|
|
@ -168,8 +168,9 @@ namespace rsx
|
||||||
backend_interrupt = 0x0001, // Backend-related interrupt
|
backend_interrupt = 0x0001, // Backend-related interrupt
|
||||||
memory_config_interrupt = 0x0002, // Memory configuration changed
|
memory_config_interrupt = 0x0002, // Memory configuration changed
|
||||||
display_interrupt = 0x0004, // Display handling
|
display_interrupt = 0x0004, // Display handling
|
||||||
|
pipe_flush_interrupt = 0x0008, // Flush pipelines
|
||||||
|
|
||||||
all_interrupt_bits = memory_config_interrupt | backend_interrupt | display_interrupt
|
all_interrupt_bits = memory_config_interrupt | backend_interrupt | display_interrupt | pipe_flush_interrupt
|
||||||
};
|
};
|
||||||
|
|
||||||
enum FIFO_state : u8
|
enum FIFO_state : u8
|
||||||
|
|
|
@ -836,11 +836,6 @@ namespace rsx
|
||||||
rsx_log.warning("Reports area at location %s was accessed. ZCULL optimizations will be disabled.", location_tostring(location));
|
rsx_log.warning("Reports area at location %s was accessed. ZCULL optimizations will be disabled.", location_tostring(location));
|
||||||
m_pages_accessed[location] = true;
|
m_pages_accessed[location] = true;
|
||||||
|
|
||||||
// Flush all pending writes
|
|
||||||
m_critical_reports_in_flight += 0x100000;
|
|
||||||
ptimer->sync();
|
|
||||||
m_critical_reports_in_flight -= 0x100000;
|
|
||||||
|
|
||||||
// Unlock pages
|
// Unlock pages
|
||||||
for (auto& p : m_locked_pages[location])
|
for (auto& p : m_locked_pages[location])
|
||||||
{
|
{
|
||||||
|
@ -911,6 +906,8 @@ namespace rsx
|
||||||
rsx::eng_lock rlock(thr);
|
rsx::eng_lock rlock(thr);
|
||||||
std::scoped_lock lock(m_pages_mutex);
|
std::scoped_lock lock(m_pages_mutex);
|
||||||
disable_optimizations(thr, location);
|
disable_optimizations(thr, location);
|
||||||
|
|
||||||
|
thr->m_eng_interrupt_mask |= rsx::pipe_flush_interrupt;
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue