diff --git a/rpcs3/Emu/RSX/GL/GLGSRender.cpp b/rpcs3/Emu/RSX/GL/GLGSRender.cpp index 4770f27ad9..8717d82ca4 100644 --- a/rpcs3/Emu/RSX/GL/GLGSRender.cpp +++ b/rpcs3/Emu/RSX/GL/GLGSRender.cpp @@ -917,7 +917,7 @@ void GLGSRender::update_vertex_env(const gl::vertex_upload_info& upload_info) bool GLGSRender::on_access_violation(u32 address, bool is_writing) { - const bool can_flush = (std::this_thread::get_id() == m_rsx_thread); + const bool can_flush = is_current_thread(); const rsx::invalidation_cause cause = is_writing ? (can_flush ? rsx::invalidation_cause::write : rsx::invalidation_cause::deferred_write) : (can_flush ? rsx::invalidation_cause::read : rsx::invalidation_cause::deferred_read); diff --git a/rpcs3/Emu/RSX/RSXOffload.cpp b/rpcs3/Emu/RSX/RSXOffload.cpp index 666f1883ad..3356326b4b 100644 --- a/rpcs3/Emu/RSX/RSXOffload.cpp +++ b/rpcs3/Emu/RSX/RSXOffload.cpp @@ -16,7 +16,7 @@ namespace rsx atomic_t m_processed_count = 0; transport_packet* m_current_job = nullptr; - std::thread::id m_thread_id; + thread_base* current_thread_ = nullptr; void operator ()() { @@ -26,7 +26,8 @@ namespace rsx return; } - m_thread_id = std::this_thread::get_id(); + current_thread_ = thread_ctrl::get_current(); + ensure(current_thread_); if (g_cfg.core.thread_scheduler != thread_scheduler_mode::os) { @@ -147,7 +148,12 @@ namespace rsx // Synchronization bool dma_manager::is_current_thread() { - return std::this_thread::get_id() == g_fxo->get().m_thread_id; + if (auto cpu = thread_ctrl::get_current()) + { + return g_fxo->get().current_thread_ == cpu; + } + + return false; } bool dma_manager::sync() const diff --git a/rpcs3/Emu/RSX/RSXThread.cpp b/rpcs3/Emu/RSX/RSXThread.cpp index 05b8290f07..ff71fc757c 100644 --- a/rpcs3/Emu/RSX/RSXThread.cpp +++ b/rpcs3/Emu/RSX/RSXThread.cpp @@ -576,8 +576,6 @@ namespace rsx void thread::on_task() { - m_rsx_thread = std::this_thread::get_id(); - g_tls_log_prefix = [] { const auto rsx = get_current_renderer(); diff --git a/rpcs3/Emu/RSX/RSXThread.h b/rpcs3/Emu/RSX/RSXThread.h index a39530afb0..a90de45745 100644 --- a/rpcs3/Emu/RSX/RSXThread.h +++ b/rpcs3/Emu/RSX/RSXThread.h @@ -602,7 +602,6 @@ namespace rsx void cpu_task() override; protected: - std::thread::id m_rsx_thread; atomic_t m_rsx_thread_exiting{ true }; std::array vertex_push_buffers; @@ -963,7 +962,10 @@ namespace rsx u32 get_load(); // Returns true if the current thread is the active RSX thread - bool is_current_thread() const { return std::this_thread::get_id() == m_rsx_thread; } + inline bool is_current_thread() const + { + return !!cpu_thread::get_current(); + } }; inline thread* get_current_renderer()