From 2ed370093e2cac291e4250e4d75f280dd030687b Mon Sep 17 00:00:00 2001 From: Eladash Date: Sat, 28 Mar 2020 13:11:35 +0300 Subject: [PATCH] rsx: Get rid of invalid_command_interrupt_raised --- rpcs3/Emu/RSX/RSXFIFO.cpp | 7 ------- rpcs3/Emu/RSX/RSXThread.cpp | 2 +- rpcs3/Emu/RSX/RSXThread.h | 1 - rpcs3/Emu/RSX/rsx_methods.cpp | 6 +++--- 4 files changed, 4 insertions(+), 12 deletions(-) diff --git a/rpcs3/Emu/RSX/RSXFIFO.cpp b/rpcs3/Emu/RSX/RSXFIFO.cpp index 480dbb0fc9..93931d721d 100644 --- a/rpcs3/Emu/RSX/RSXFIFO.cpp +++ b/rpcs3/Emu/RSX/RSXFIFO.cpp @@ -614,13 +614,6 @@ namespace rsx if (auto method = methods[reg]) { method(this, reg, value); - - if (invalid_command_interrupt_raised) - { - fifo_ctrl->abort(); - recover_fifo(); - return; - } } } while (fifo_ctrl->read_unsafe(command)); diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 4d8b7e22c8..79c182c350 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -2277,7 +2277,7 @@ namespace rsx fifo_ctrl->set_get(restore_point); fifo_ret_addr = saved_fifo_ret; std::this_thread::sleep_for(1ms); - invalid_command_interrupt_raised = false; + fifo_ctrl->abort(); if (std::exchange(in_begin_end, false) && !rsx::method_registers.current_draw_clause.empty()) { diff --git a/rpcs3/Emu/RSX/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h index c3aa1b24e9..51db0a419a 100644 --- a/rpcs3/Emu/RSX/RSXThread.h +++ b/rpcs3/Emu/RSX/RSXThread.h @@ -723,7 +723,6 @@ namespace rsx bool capture_current_frame = false; public: - bool invalid_command_interrupt_raised = false; bool sync_point_request = false; bool in_begin_end = false; diff --git a/rpcs3/Emu/RSX/rsx_methods.cpp b/rpcs3/Emu/RSX/rsx_methods.cpp index 495b2dd426..43ff57ac74 100644 --- a/rpcs3/Emu/RSX/rsx_methods.cpp +++ b/rpcs3/Emu/RSX/rsx_methods.cpp @@ -43,7 +43,7 @@ namespace rsx const u32 cmd = rsx->get_fifo_cmd(); rsx_log.error("Invalid RSX method 0x%x (arg=0x%x, start=0x%x, count=0x%x, non-inc=%s)", _reg << 2, arg, cmd & 0xfffc, (cmd >> 18) & 0x7ff, !!(cmd & RSX_METHOD_NON_INCREMENT_CMD)); - rsx->invalid_command_interrupt_raised = true; + rsx->recover_fifo(); } void trace_method(thread* rsx, u32 _reg, u32 arg) @@ -541,7 +541,7 @@ namespace rsx if (rsx::method_registers.current_draw_clause.primitive == rsx::primitive_type::invalid) { // Recover from invalid primitive only if draw clause is not empty - rsxthr->invalid_command_interrupt_raised = true; + rsxthr->recover_fifo(); rsx_log.error("NV4097_SET_BEGIN_END aborted due to invalid primitive!"); return; @@ -755,7 +755,7 @@ namespace rsx { // Ignore invalid value, recover method_registers.registers[reg] = method_registers.register_previous_value; - rsx->invalid_command_interrupt_raised = true; + rsx->recover_fifo(); rsx_log.error("Invalid NV4097_SET_INDEX_ARRAY_DMA value: 0x%x", arg); }