vk: Insert a all_commands->transfer barrier before copying query results to scratch
This commit is contained in:
@@ -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;
|
||||||
|
|||||||
Reference in New Issue
Block a user