early-access version 3694

This commit is contained in:
pineappleEA 2023-06-18 04:16:23 +02:00
parent cde14e143c
commit df898bc7d9
3 changed files with 15 additions and 6 deletions

View file

@ -1,7 +1,7 @@
yuzu emulator early access yuzu emulator early access
============= =============
This is the source code for early-access 3692. This is the source code for early-access 3694.
## Legal Notice ## Legal Notice

View file

@ -4,6 +4,8 @@
#include <algorithm> #include <algorithm>
#include <atomic> #include <atomic>
#include <cinttypes> #include <cinttypes>
#include <condition_variable>
#include <mutex>
#include <optional> #include <optional>
#include <vector> #include <vector>
@ -1311,7 +1313,8 @@ void KThread::RequestDummyThreadWait() {
ASSERT(this->IsDummyThread()); ASSERT(this->IsDummyThread());
// We will block when the scheduler lock is released. // We will block when the scheduler lock is released.
m_dummy_thread_runnable.store(false); std::scoped_lock lock{m_dummy_thread_mutex};
m_dummy_thread_runnable = false;
} }
void KThread::DummyThreadBeginWait() { void KThread::DummyThreadBeginWait() {
@ -1321,7 +1324,8 @@ void KThread::DummyThreadBeginWait() {
} }
// Block until runnable is no longer false. // Block until runnable is no longer false.
m_dummy_thread_runnable.wait(false); std::unique_lock lock{m_dummy_thread_mutex};
m_dummy_thread_cv.wait(lock, [this] { return m_dummy_thread_runnable; });
} }
void KThread::DummyThreadEndWait() { void KThread::DummyThreadEndWait() {
@ -1329,8 +1333,11 @@ void KThread::DummyThreadEndWait() {
ASSERT(this->IsDummyThread()); ASSERT(this->IsDummyThread());
// Wake up the waiting thread. // Wake up the waiting thread.
m_dummy_thread_runnable.store(true); {
m_dummy_thread_runnable.notify_one(); std::scoped_lock lock{m_dummy_thread_mutex};
m_dummy_thread_runnable = true;
}
m_dummy_thread_cv.notify_one();
} }
void KThread::BeginWait(KThreadQueue* queue) { void KThread::BeginWait(KThreadQueue* queue) {

View file

@ -893,7 +893,9 @@ private:
std::shared_ptr<Common::Fiber> m_host_context{}; std::shared_ptr<Common::Fiber> m_host_context{};
ThreadType m_thread_type{}; ThreadType m_thread_type{};
StepState m_step_state{}; StepState m_step_state{};
std::atomic<bool> m_dummy_thread_runnable{true}; bool m_dummy_thread_runnable{true};
std::mutex m_dummy_thread_mutex{};
std::condition_variable m_dummy_thread_cv{};
// For debugging // For debugging
std::vector<KSynchronizationObject*> m_wait_objects_for_debugging{}; std::vector<KSynchronizationObject*> m_wait_objects_for_debugging{};