File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff 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
Original file line number Diff line number Diff line change 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}
You can’t perform that action at this time.
0 commit comments