Skip to content

Commit 51ea735

Browse files
committed
rsx/vk: Try to reclaim memory aggressively when changing resolution scale
1 parent 069821a commit 51ea735

2 files changed

Lines changed: 21 additions & 1 deletion

File tree

rpcs3/Emu/RSX/Common/surface_store.h

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1523,8 +1523,12 @@ namespace rsx
15231523
allocate_rsx_memory(Traits::get(sink));
15241524

15251525
// Replace with the new one
1526-
ensure(copy.target == Traits::get(sink));
1526+
auto new_surface = Traits::get(sink);
1527+
ensure(copy.target == new_surface);
15271528
data.emplace(surface->get_memory_range(), std::move(sink));
1529+
1530+
// Force barrier to reduce VRAM pressure
1531+
new_surface->memory_barrier(cmd, rsx::surface_access::memory_read);
15281532
}
15291533
};
15301534

rpcs3/Emu/RSX/VK/VKPresent.cpp

Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
#include "stdafx.h"
22
#include "VKGSRender.h"
33
#include "vkutils/buffer_object.h"
4+
#include "vkutils/memory.h"
45
#include "Emu/RSX/Overlays/overlay_manager.h"
56
#include "Emu/RSX/Overlays/overlay_debug_overlay.h"
67
#include "Emu/Cell/Modules/cellVideoOut.h"
@@ -973,7 +974,22 @@ void VKGSRender::flip(const rsx::display_flip_info_t& info)
973974

974975
if (active_res_scaling_config != this->resolution_scaling_config)
975976
{
977+
// First, try to reclaim any memory since the res scale upgrade is so memory intensive
978+
if (const auto severity = vk::vmm_determine_memory_load_severity();
979+
severity > rsx::problem_severity::low && m_rtts.handle_memory_pressure(*m_current_command_buffer, severity))
980+
{
981+
flush_command_queue(true);
982+
}
983+
984+
// Then apply the change
976985
m_rtts.sync_scaling_config(*m_current_command_buffer, active_res_scaling_config);
977986
this->resolution_scaling_config = active_res_scaling_config;
987+
988+
// Finally reclaim any unused resources
989+
if (const auto severity = vk::vmm_determine_memory_load_severity();
990+
severity > rsx::problem_severity::low && m_rtts.handle_memory_pressure(*m_current_command_buffer, severity))
991+
{
992+
flush_command_queue(true);
993+
}
978994
}
979995
}

0 commit comments

Comments
 (0)