mirror of https://github.com/RPCS3/rpcs3.git
rsx: Implement fast ZCULL barrier when query object is already known
This commit is contained in:
parent
d7ffc8b4ac
commit
c9c0d7361d
|
@ -355,7 +355,8 @@ namespace rsx
|
|||
}
|
||||
else
|
||||
{
|
||||
zcull_ctrl->read_barrier(this, cond_render_ctrl.eval_address, 4, reports::sync_no_notify);
|
||||
// NOTE: eval_sources list is reversed with newest query first
|
||||
zcull_ctrl->read_barrier(this, cond_render_ctrl.eval_address, cond_render_ctrl.eval_sources.front());
|
||||
verify(HERE), !cond_render_ctrl.eval_pending();
|
||||
}
|
||||
}
|
||||
|
@ -3622,6 +3623,16 @@ namespace rsx
|
|||
return result_zcull_intr;
|
||||
}
|
||||
|
||||
flags32_t ZCULL_control::read_barrier(class ::rsx::thread* ptimer, u32 memory_address, occlusion_query_info* query)
|
||||
{
|
||||
while (query->pending && !Emu.IsStopped())
|
||||
{
|
||||
update(ptimer, memory_address);
|
||||
}
|
||||
|
||||
return result_none;
|
||||
}
|
||||
|
||||
query_search_result ZCULL_control::find_query(vm::addr_t sink_address, bool all)
|
||||
{
|
||||
query_search_result result{};
|
||||
|
|
|
@ -456,6 +456,7 @@ namespace rsx
|
|||
|
||||
// Conditionally sync any pending writes if range overlaps
|
||||
flags32_t read_barrier(class ::rsx::thread* ptimer, u32 memory_address, u32 memory_range, flags32_t flags);
|
||||
flags32_t read_barrier(class ::rsx::thread* ptimer, u32 memory_address, occlusion_query_info* query);
|
||||
|
||||
// Call once every 'tick' to update, optional address provided to partially sync until address is processed
|
||||
void update(class ::rsx::thread* ptimer, u32 sync_address = 0, bool hint = false);
|
||||
|
|
Loading…
Reference in New Issue