mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-02-06 18:40:36 +00:00
rsx capture: Fix exceptions handler, fix tiny race condition on capture new capture
This commit is contained in:
parent
7e9dbeff7b
commit
c04abac630
@ -28,8 +28,7 @@ class GSRender;
|
||||
|
||||
#define CMD_DEBUG 0
|
||||
|
||||
bool user_asked_for_frame_capture = false;
|
||||
bool capture_current_frame = false;
|
||||
std::atomic<bool> user_asked_for_frame_capture = false;
|
||||
rsx::frame_trace_data frame_debug;
|
||||
rsx::frame_capture_data frame_capture;
|
||||
|
||||
@ -310,6 +309,8 @@ namespace rsx
|
||||
|
||||
m_graphics_state = pipeline_state::all_dirty;
|
||||
|
||||
user_asked_for_frame_capture = false;
|
||||
|
||||
if (g_cfg.misc.use_native_interface && (g_cfg.video.renderer == video_renderer::opengl || g_cfg.video.renderer == video_renderer::vulkan))
|
||||
{
|
||||
m_overlay_manager = g_fxo->init<rsx::overlays::display_manager>(0);
|
||||
@ -651,9 +652,6 @@ namespace rsx
|
||||
std::this_thread::sleep_for(10ms);
|
||||
do_local_task(rsx::FIFO_state::lock_wait);
|
||||
|
||||
user_asked_for_frame_capture = false;
|
||||
capture_current_frame = false;
|
||||
|
||||
m_rsx_thread_exiting = true;
|
||||
g_fxo->get<rsx::dma_manager>()->join();
|
||||
}
|
||||
@ -2519,10 +2517,9 @@ namespace rsx
|
||||
void thread::on_frame_end(u32 buffer, bool forced)
|
||||
{
|
||||
// Marks the end of a frame scope GPU-side
|
||||
if (user_asked_for_frame_capture && !capture_current_frame)
|
||||
if (user_asked_for_frame_capture.exchange(false) && !capture_current_frame)
|
||||
{
|
||||
capture_current_frame = true;
|
||||
user_asked_for_frame_capture = false;
|
||||
frame_debug.reset();
|
||||
frame_capture.reset();
|
||||
|
||||
|
@ -3,6 +3,7 @@
|
||||
#include <deque>
|
||||
#include <variant>
|
||||
#include <stack>
|
||||
#include <atomic>
|
||||
|
||||
#include "GCM.h"
|
||||
#include "rsx_cache.h"
|
||||
@ -26,8 +27,7 @@
|
||||
extern u64 get_guest_system_time();
|
||||
extern u64 get_system_time();
|
||||
|
||||
extern bool user_asked_for_frame_capture;
|
||||
extern bool capture_current_frame;
|
||||
extern std::atomic<bool> user_asked_for_frame_capture;
|
||||
extern rsx::frame_trace_data frame_debug;
|
||||
extern rsx::frame_capture_data frame_capture;
|
||||
|
||||
@ -717,6 +717,7 @@ namespace rsx
|
||||
vm::ptr<void(u32)> user_handler = vm::null;
|
||||
vm::ptr<void(u32)> vblank_handler = vm::null;
|
||||
atomic_t<u64> vblank_count{0};
|
||||
bool capture_current_frame = false;
|
||||
|
||||
public:
|
||||
bool invalid_command_interrupt_raised = false;
|
||||
|
@ -176,7 +176,7 @@ namespace rsx
|
||||
{
|
||||
rsx->clear_surface(arg);
|
||||
|
||||
if (capture_current_frame)
|
||||
if (rsx->capture_current_frame)
|
||||
{
|
||||
rsx->capture_frame("clear");
|
||||
}
|
||||
@ -184,7 +184,7 @@ namespace rsx
|
||||
|
||||
void clear_zcull(thread* rsx, u32 _reg, u32 arg)
|
||||
{
|
||||
if (capture_current_frame)
|
||||
if (rsx->capture_current_frame)
|
||||
{
|
||||
rsx->capture_frame("clear zcull memory");
|
||||
}
|
||||
|
@ -25,9 +25,10 @@
|
||||
#include <QJSEngine>
|
||||
#include <QVBoxLayout>
|
||||
#include <QTimer>
|
||||
#include <atomic>
|
||||
|
||||
constexpr auto qstr = QString::fromStdString;
|
||||
extern bool user_asked_for_frame_capture;
|
||||
extern std::atomic<bool> user_asked_for_frame_capture;
|
||||
|
||||
debugger_frame::debugger_frame(std::shared_ptr<gui_settings> settings, QWidget *parent)
|
||||
: custom_dock_widget(tr("Debugger"), parent), xgui_settings(settings)
|
||||
|
Loading…
x
Reference in New Issue
Block a user