summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2020-03-31 19:52:07 +0200
committerFernando Sahmkow <fsahmkow27@gmail.com>2020-06-27 17:36:03 +0200
commit54e304fe2a38984ea27a7f2240c41a85931d7f6b (patch)
treea05917e949a1da864c060aec6b874a58af87e244
parentHLE_IPC: Correct HLE Event behavior on timeout. (diff)
downloadyuzu-54e304fe2a38984ea27a7f2240c41a85931d7f6b.tar
yuzu-54e304fe2a38984ea27a7f2240c41a85931d7f6b.tar.gz
yuzu-54e304fe2a38984ea27a7f2240c41a85931d7f6b.tar.bz2
yuzu-54e304fe2a38984ea27a7f2240c41a85931d7f6b.tar.lz
yuzu-54e304fe2a38984ea27a7f2240c41a85931d7f6b.tar.xz
yuzu-54e304fe2a38984ea27a7f2240c41a85931d7f6b.tar.zst
yuzu-54e304fe2a38984ea27a7f2240c41a85931d7f6b.zip
-rw-r--r--src/core/cpu_manager.cpp15
-rw-r--r--src/yuzu/bootmanager.cpp4
2 files changed, 13 insertions, 6 deletions
diff --git a/src/core/cpu_manager.cpp b/src/core/cpu_manager.cpp
index d604aa446..c0974ee38 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();
diff --git a/src/yuzu/bootmanager.cpp b/src/yuzu/bootmanager.cpp
index 6fad01d50..6aa161e99 100644
--- a/src/yuzu/bootmanager.cpp
+++ b/src/yuzu/bootmanager.cpp
@@ -56,6 +56,8 @@ void EmuThread::run() {
Core::System::GetInstance().RegisterHostThread();
+ context.MakeCurrent();
+
Core::System::GetInstance().Renderer().Rasterizer().LoadDiskResources(
stop_run, [this](VideoCore::LoadCallbackStage stage, std::size_t value, std::size_t total) {
emit LoadProgress(stage, value, total);
@@ -63,6 +65,8 @@ void EmuThread::run() {
emit LoadProgress(VideoCore::LoadCallbackStage::Complete, 0, 0);
+ context.DoneCurrent();
+
// Holds whether the cpu was running during the last iteration,
// so that the DebugModeLeft signal can be emitted before the
// next execution step