diff --git a/rpcs3/Emu/RSX/RSXOffload.h b/rpcs3/Emu/RSX/RSXOffload.h index 19e45f0ae0..5bacb9b4ff 100644 --- a/rpcs3/Emu/RSX/RSXOffload.h +++ b/rpcs3/Emu/RSX/RSXOffload.h @@ -85,6 +85,4 @@ namespace rsx // Fault recovery utils::address_range get_fault_range(bool writing) const; }; - - extern dma_manager g_dma_manager; } diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 27cd45b310..78c13e1d58 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -40,8 +40,6 @@ namespace rsx { std::function g_access_violation_handler; - dma_manager g_dma_manager; - u32 get_address(u32 offset, u32 location, const char* from) { const auto render = get_current_renderer(); @@ -481,7 +479,7 @@ namespace rsx rsx::overlays::reset_performance_overlay(); - g_dma_manager.init(); + g_fxo->get()->init(); on_init_thread(); method_registers.init(); @@ -664,7 +662,7 @@ namespace rsx capture_current_frame = false; m_rsx_thread_exiting = true; - g_dma_manager.join(); + g_fxo->get()->join(); } void thread::fill_scale_offset_data(void *buffer, bool flip_y) const @@ -2091,7 +2089,7 @@ namespace rsx const u32 data_size = range.second * block.attribute_stride; const u32 vertex_base = range.first * block.attribute_stride; - g_dma_manager.copy(persistent, vm::_ptr(block.real_offset_address) + vertex_base, data_size); + g_fxo->get()->copy(persistent, vm::_ptr(block.real_offset_address) + vertex_base, data_size); persistent += data_size; } } @@ -2249,7 +2247,7 @@ namespace rsx m_graphics_state |= rsx::pipeline_state::fragment_constants_dirty; // DMA sync; if you need this, don't use MTRSX - // g_dma_manager.sync(); + // g_fxo->get()->sync(); //TODO: On sync every sub-unit should finish any pending tasks //Might cause zcull lockup due to zombie 'unclaimed reports' which are not forcefully removed currently @@ -2489,7 +2487,7 @@ namespace rsx { if (g_cfg.video.multithreaded_rsx) { - g_dma_manager.sync(); + g_fxo->get()->sync(); } external_interrupt_ack.store(true); diff --git a/rpcs3/Emu/RSX/VK/VKCommandStream.cpp b/rpcs3/Emu/RSX/VK/VKCommandStream.cpp index ef72e0e716..96fb768f53 100644 --- a/rpcs3/Emu/RSX/VK/VKCommandStream.cpp +++ b/rpcs3/Emu/RSX/VK/VKCommandStream.cpp @@ -21,7 +21,7 @@ namespace vk if (!flush && g_cfg.video.multithreaded_rsx) { auto packet = new submit_packet(queue, pfence, info); - rsx::g_dma_manager.backend_ctrl(rctrl_queue_submit, packet); + g_fxo->get()->backend_ctrl(rctrl_queue_submit, packet); } else { diff --git a/rpcs3/Emu/RSX/VK/VKGSRender.cpp b/rpcs3/Emu/RSX/VK/VKGSRender.cpp index 34e8041820..8d092b61a5 100644 --- a/rpcs3/Emu/RSX/VK/VKGSRender.cpp +++ b/rpcs3/Emu/RSX/VK/VKGSRender.cpp @@ -720,15 +720,15 @@ bool VKGSRender::on_access_violation(u32 address, bool is_writing) if (result.num_flushable > 0) { - if (rsx::g_dma_manager.is_current_thread()) + if (g_fxo->get()->is_current_thread()) { // The offloader thread cannot handle flush requests verify(HERE), m_queue_status.load() == flush_queue_state::ok; - m_offloader_fault_range = rsx::g_dma_manager.get_fault_range(is_writing); + m_offloader_fault_range = g_fxo->get()->get_fault_range(is_writing); m_offloader_fault_cause = (is_writing) ? rsx::invalidation_cause::write : rsx::invalidation_cause::read; - rsx::g_dma_manager.set_mem_fault_flag(); + g_fxo->get()->set_mem_fault_flag(); m_queue_status |= flush_queue_state::deadlock; // Wait for deadlock to clear @@ -737,7 +737,7 @@ bool VKGSRender::on_access_violation(u32 address, bool is_writing) _mm_pause(); } - rsx::g_dma_manager.clear_mem_fault_flag(); + g_fxo->get()->clear_mem_fault_flag(); return true; } @@ -2668,7 +2668,7 @@ void VKGSRender::close_and_submit_command_buffer(vk::fence* pFence, VkSemaphore { // Workaround for deadlock occuring during RSX offloader fault // TODO: Restructure command submission infrastructure to avoid this condition - const bool sync_success = rsx::g_dma_manager.sync(); + const bool sync_success = g_fxo->get()->sync(); const VkBool32 force_flush = !sync_success; if (vk::test_status_interrupt(vk::heap_dirty)) diff --git a/rpcs3/Emu/RSX/VK/VKHelpers.cpp b/rpcs3/Emu/RSX/VK/VKHelpers.cpp index 8723f64611..cd72ce0731 100644 --- a/rpcs3/Emu/RSX/VK/VKHelpers.cpp +++ b/rpcs3/Emu/RSX/VK/VKHelpers.cpp @@ -147,7 +147,7 @@ namespace vk } // Wait for DMA activity to end - rsx::g_dma_manager.sync(); + g_fxo->get()->sync(); if (mapped) { diff --git a/rpcs3/Emu/RSX/VK/VKVertexBuffers.cpp b/rpcs3/Emu/RSX/VK/VKVertexBuffers.cpp index 8b8189b545..3a3c32fe32 100644 --- a/rpcs3/Emu/RSX/VK/VKVertexBuffers.cpp +++ b/rpcs3/Emu/RSX/VK/VKVertexBuffers.cpp @@ -68,7 +68,7 @@ namespace VkDeviceSize offset_in_index_buffer = m_index_buffer_ring_info.alloc<256>(upload_size); void* buf = m_index_buffer_ring_info.map(offset_in_index_buffer, upload_size); - rsx::g_dma_manager.emulate_as_indexed(buf, clause.primitive, vertex_count); + g_fxo->get()->emulate_as_indexed(buf, clause.primitive, vertex_count); m_index_buffer_ring_info.unmap(); return std::make_tuple( diff --git a/rpcs3/Emu/RSX/rsx_methods.cpp b/rpcs3/Emu/RSX/rsx_methods.cpp index 1c6756707b..7674e5d586 100644 --- a/rpcs3/Emu/RSX/rsx_methods.cpp +++ b/rpcs3/Emu/RSX/rsx_methods.cpp @@ -229,7 +229,7 @@ namespace rsx void texture_read_semaphore_release(thread* rsx, u32 _reg, u32 arg) { // Pipeline barrier seems to be equivalent to a SHADER_READ stage barrier - rsx::g_dma_manager.sync(); + g_fxo->get()->sync(); if (g_cfg.video.strict_rendering_mode) { rsx->sync(); @@ -249,7 +249,7 @@ namespace rsx void back_end_write_semaphore_release(thread* rsx, u32 _reg, u32 arg) { // Full pipeline barrier - rsx::g_dma_manager.sync(); + g_fxo->get()->sync(); rsx->sync(); const u32 offset = method_registers.semaphore_offset_4097() & -16;