mirror of
https://github.com/RPCS3/rpcs3.git
synced 2025-07-02 21:11:25 +12:00
Compare commits
2 commits
cb5fd17635
...
c27d7db0a7
Author | SHA1 | Date | |
---|---|---|---|
|
c27d7db0a7 | ||
|
7e7943f962 |
5 changed files with 32 additions and 19 deletions
|
@ -185,13 +185,13 @@ void Emulator::CallFromMainThread(std::function<void()>&& func, atomic_t<u32>* w
|
|||
m_cb.call_from_main_thread(std::move(final_func), wake_up);
|
||||
}
|
||||
|
||||
void Emulator::BlockingCallFromMainThread(std::function<void()>&& func, std::source_location src_loc) const
|
||||
void Emulator::BlockingCallFromMainThread(std::function<void()>&& func, bool track_emu_state, std::source_location src_loc) const
|
||||
{
|
||||
atomic_t<u32> wake_up = 0;
|
||||
|
||||
sys_log.trace("Blocking Callback from thread '%s' at [%s] is queued", thread_ctrl::get_name(), src_loc);
|
||||
|
||||
CallFromMainThread(std::move(func), &wake_up, true, umax, src_loc);
|
||||
CallFromMainThread(std::move(func), &wake_up, track_emu_state, umax, src_loc);
|
||||
|
||||
bool logged = false;
|
||||
|
||||
|
|
|
@ -210,7 +210,7 @@ public:
|
|||
std::source_location src_loc = std::source_location::current()) const;
|
||||
|
||||
// Blocking call from the GUI thread
|
||||
void BlockingCallFromMainThread(std::function<void()>&& func, std::source_location src_loc = std::source_location::current()) const;
|
||||
void BlockingCallFromMainThread(std::function<void()>&& func, bool track_emu_state = true, std::source_location src_loc = std::source_location::current()) const;
|
||||
|
||||
enum class stop_counter_t : u64{};
|
||||
|
||||
|
|
|
@ -1,6 +1,8 @@
|
|||
#ifdef HAVE_SDL3
|
||||
|
||||
#include "stdafx.h"
|
||||
#include "sdl_instance.h"
|
||||
#include "Emu/System.h"
|
||||
|
||||
#ifndef _MSC_VER
|
||||
#pragma GCC diagnostic push
|
||||
|
@ -11,10 +13,6 @@
|
|||
#pragma GCC diagnostic pop
|
||||
#endif
|
||||
|
||||
#include "util/logs.hpp"
|
||||
|
||||
#include "sdl_instance.h"
|
||||
|
||||
LOG_CHANNEL(sdl_log, "SDL");
|
||||
|
||||
sdl_instance::~sdl_instance()
|
||||
|
@ -35,9 +33,12 @@ sdl_instance& sdl_instance::get_instance()
|
|||
|
||||
void sdl_instance::pump_events()
|
||||
{
|
||||
const std::lock_guard<std::mutex> lock(m_instance_mutex);
|
||||
std::lock_guard lock(m_instance_mutex);
|
||||
|
||||
if (m_initialized)
|
||||
{
|
||||
SDL_PumpEvents();
|
||||
}
|
||||
}
|
||||
|
||||
void sdl_instance::set_hint(const char* name, const char* value)
|
||||
|
@ -50,7 +51,25 @@ void sdl_instance::set_hint(const char* name, const char* value)
|
|||
|
||||
bool sdl_instance::initialize()
|
||||
{
|
||||
const std::lock_guard<std::mutex> lock(m_instance_mutex);
|
||||
std::lock_guard lock(m_instance_mutex);
|
||||
|
||||
if (m_initialized)
|
||||
{
|
||||
return true;
|
||||
}
|
||||
|
||||
bool instance_success = false;
|
||||
|
||||
Emu.BlockingCallFromMainThread([this, &instance_success]()
|
||||
{
|
||||
instance_success = initialize_impl();
|
||||
}, false);
|
||||
|
||||
return instance_success;
|
||||
}
|
||||
|
||||
bool sdl_instance::initialize_impl()
|
||||
{
|
||||
// Only init SDL once. SDL uses a global state internally...
|
||||
if (m_initialized)
|
||||
{
|
||||
|
|
|
@ -8,7 +8,7 @@ struct sdl_instance
|
|||
{
|
||||
public:
|
||||
sdl_instance() = default;
|
||||
~sdl_instance();
|
||||
virtual ~sdl_instance();
|
||||
|
||||
static sdl_instance& get_instance();
|
||||
|
||||
|
@ -17,6 +17,7 @@ public:
|
|||
|
||||
private:
|
||||
void set_hint(const char* name, const char* value);
|
||||
bool initialize_impl();
|
||||
|
||||
bool m_initialized = false;
|
||||
std::mutex m_instance_mutex;
|
||||
|
|
|
@ -2,10 +2,10 @@
|
|||
|
||||
#include "stdafx.h"
|
||||
#include "sdl_pad_handler.h"
|
||||
#include "sdl_instance.h"
|
||||
#include "Emu/system_utils.hpp"
|
||||
#include "Emu/system_config.h"
|
||||
#include "Emu/System.h"
|
||||
#include "sdl_instance.h"
|
||||
|
||||
#include <mutex>
|
||||
|
||||
|
@ -180,14 +180,7 @@ bool sdl_pad_handler::Init()
|
|||
if (m_is_init)
|
||||
return true;
|
||||
|
||||
bool instance_success;
|
||||
|
||||
Emu.BlockingCallFromMainThread([&instance_success]()
|
||||
{
|
||||
instance_success = sdl_instance::get_instance().initialize();
|
||||
});
|
||||
|
||||
if (!instance_success)
|
||||
if (!sdl_instance::get_instance().initialize())
|
||||
return false;
|
||||
|
||||
if (g_cfg.io.load_sdl_mappings)
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue