From 54e304fe2a38984ea27a7f2240c41a85931d7f6b Mon Sep 17 00:00:00 2001
From: Fernando Sahmkow <fsahmkow27@gmail.com>
Date: Tue, 31 Mar 2020 13:52:07 -0400
Subject: Bootmanager/CPU_Manager: Correct shader caches and sync GPU on
 OpenGL.

---
 src/core/cpu_manager.cpp | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

(limited to 'src/core/cpu_manager.cpp')

diff --git a/src/core/cpu_manager.cpp b/src/core/cpu_manager.cpp
index d604aa4464..c0974ee383 100644
--- a/src/core/cpu_manager.cpp
+++ b/src/core/cpu_manager.cpp
@@ -22,13 +22,7 @@ CpuManager::CpuManager(System& system) : system{system} {}
 CpuManager::~CpuManager() = default;
 
 void CpuManager::ThreadStart(CpuManager& cpu_manager, std::size_t core) {
-    if (!cpu_manager.is_async_gpu && !cpu_manager.is_multicore) {
-        cpu_manager.render_window->MakeCurrent();
-    }
     cpu_manager.RunThread(core);
-    if (!cpu_manager.is_async_gpu && !cpu_manager.is_multicore) {
-        cpu_manager.render_window->DoneCurrent();
-    }
 }
 
 void CpuManager::SetRenderWindow(Core::Frontend::EmuWindow& render_window) {
@@ -353,10 +347,16 @@ void CpuManager::RunThread(std::size_t core) {
     data.host_context = Common::Fiber::ThreadToFiber();
     data.is_running = false;
     data.initialized = true;
+    const bool sc_sync = !is_async_gpu && !is_multicore;
+    bool sc_sync_first_use = sc_sync;
     /// Running
     while (running_mode) {
         data.is_running = false;
         data.enter_barrier->Wait();
+        if (sc_sync_first_use) {
+            render_window->MakeCurrent();
+            sc_sync_first_use = false;
+        }
         auto& scheduler = system.Kernel().CurrentScheduler();
         Kernel::Thread* current_thread = scheduler.GetCurrentThread();
         data.is_running = true;
@@ -366,6 +366,9 @@ void CpuManager::RunThread(std::size_t core) {
         data.exit_barrier->Wait();
         data.is_paused = false;
     }
+    if (sc_sync) {
+        render_window->DoneCurrent();
+    }
     /// Time to cleanup
     data.host_context->Exit();
     data.enter_barrier.reset();
-- 
cgit v1.2.3-70-g09d2