rsx: Make the deferred mm flush option usable with OpenGL

This commit is contained in:
kd-11 2024-11-25 23:21:25 +03:00 committed by kd-11
parent 83764fbbb4
commit 49d11b2e36
6 changed files with 21 additions and 11 deletions

View file

@ -99,6 +99,6 @@ namespace rsx
} }
auto& rsxdma = g_fxo->get<rsx::dma_manager>(); auto& rsxdma = g_fxo->get<rsx::dma_manager>();
rsxdma.backend_ctrl(static_cast<u32>(mm_backend_ctrl::mm_flush), nullptr); rsxdma.backend_ctrl(mm_backend_ctrl::mm_flush, nullptr);
} }
} }

View file

@ -28,9 +28,9 @@ namespace rsx
} }
}; };
enum class mm_backend_ctrl : u32 enum mm_backend_ctrl : u32
{ {
mm_flush = 0x80000002 mm_flush = 0x81000000,
}; };
void mm_protect(void* start, u64 length, utils::protection prot); void mm_protect(void* start, u64 length, utils::protection prot);

View file

@ -9,6 +9,7 @@
#include "Common/time.hpp" #include "Common/time.hpp"
#include "Core/RSXReservationLock.hpp" #include "Core/RSXReservationLock.hpp"
#include "Core/RSXEngLock.hpp" #include "Core/RSXEngLock.hpp"
#include "Host/MM.h"
#include "Host/RSXDMAWriter.h" #include "Host/RSXDMAWriter.h"
#include "NV47/HW/context.h" #include "NV47/HW/context.h"
#include "Program/GLSLCommon.h" #include "Program/GLSLCommon.h"
@ -3627,10 +3628,25 @@ namespace rsx
on_invalidate_memory_range(m_invalidated_memory_range, rsx::invalidation_cause::read); on_invalidate_memory_range(m_invalidated_memory_range, rsx::invalidation_cause::read);
} }
// Host sync
rsx::mm_flush();
on_invalidate_memory_range(m_invalidated_memory_range, rsx::invalidation_cause::unmap); on_invalidate_memory_range(m_invalidated_memory_range, rsx::invalidation_cause::unmap);
m_invalidated_memory_range.invalidate(); m_invalidated_memory_range.invalidate();
} }
void thread::renderctl(u32 request_code, void* args)
{
switch (request_code)
{
case rsx::mm_backend_ctrl::mm_flush:
rsx::mm_flush();
break;
default:
fmt::throw_exception("Unknown backend request: 0x%x", request_code);
}
}
//Pause/cont wrappers for FIFO ctrl. Never call this from rsx thread itself! //Pause/cont wrappers for FIFO ctrl. Never call this from rsx thread itself!
void thread::pause() void thread::pause()
{ {

View file

@ -404,7 +404,7 @@ namespace rsx
virtual void notify_tile_unbound(u32 /*tile*/) {} virtual void notify_tile_unbound(u32 /*tile*/) {}
// control // control
virtual void renderctl(u32 /*request_code*/, void* /*args*/) {} virtual void renderctl(u32 request_code, void* args);
// zcull // zcull
void notify_zcull_info_changed(); void notify_zcull_info_changed();

View file

@ -10,7 +10,6 @@ namespace vk
{ {
rctrl_queue_submit = 0x80000000, rctrl_queue_submit = 0x80000000,
rctrl_run_gc = 0x80000001, rctrl_run_gc = 0x80000001,
rctrl_mem_protect = 0x80000002,
}; };
struct submit_packet struct submit_packet

View file

@ -2829,13 +2829,8 @@ void VKGSRender::renderctl(u32 request_code, void* args)
vk::on_event_completed(eid, true); vk::on_event_completed(eid, true);
break; break;
} }
case vk::rctrl_mem_protect:
{
rsx::mm_flush();
break;
}
default: default:
fmt::throw_exception("Unhandled request code 0x%x", request_code); rsx::thread::renderctl(request_code, args);
} }
} }