mirror of
https://github.com/RPCS3/rpcs3.git
synced 2026-06-03 21:25:04 -06:00
vk: Insert a all_commands->transfer barrier before copying query results to scratch
This commit is contained in:
parent
5311f004d0
commit
b9f05ba71b
@ -2915,9 +2915,19 @@ void VKGSRender::begin_conditional_rendering(const std::vector<rsx::reports::occ
|
|||||||
// Range latching. Because of how the query pool manages allocations using a stack, we get an inverse sequential set of handles/indices that we can easily group together.
|
// Range latching. Because of how the query pool manages allocations using a stack, we get an inverse sequential set of handles/indices that we can easily group together.
|
||||||
// This drastically boosts performance on some drivers like the NVIDIA proprietary one that seems to have a rather high cost for every individual query transer command.
|
// This drastically boosts performance on some drivers like the NVIDIA proprietary one that seems to have a rather high cost for every individual query transer command.
|
||||||
struct { u32 first, last; } query_range = { umax, 0 };
|
struct { u32 first, last; } query_range = { umax, 0 };
|
||||||
|
bool need_barrier = true;
|
||||||
|
|
||||||
auto copy_query_range_impl = [&]()
|
auto copy_query_range_impl = [&]()
|
||||||
{
|
{
|
||||||
|
if (need_barrier)
|
||||||
|
{
|
||||||
|
need_barrier = false;
|
||||||
|
vk::insert_buffer_memory_barrier(*m_current_command_buffer, scratch->value, 0, num_hw_queries * 4,
|
||||||
|
VK_PIPELINE_STAGE_ALL_COMMANDS_BIT, VK_PIPELINE_STAGE_TRANSFER_BIT,
|
||||||
|
VK_ACCESS_MEMORY_READ_BIT | VK_ACCESS_MEMORY_WRITE_BIT,
|
||||||
|
VK_ACCESS_TRANSFER_WRITE_BIT);
|
||||||
|
}
|
||||||
|
|
||||||
const auto count = (query_range.last - query_range.first + 1);
|
const auto count = (query_range.last - query_range.first + 1);
|
||||||
m_occlusion_query_manager->get_query_result_indirect(*m_current_command_buffer, query_range.first, count, scratch->value, dst_offset);
|
m_occlusion_query_manager->get_query_result_indirect(*m_current_command_buffer, query_range.first, count, scratch->value, dst_offset);
|
||||||
dst_offset += count * 4;
|
dst_offset += count * 4;
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user