General: Correct rebase, sync gpu and context management.

This commit is contained in:
Fernando Sahmkow 2020-04-03 11:58:43 -04:00
parent afb6d31c02
commit 543b6b315f
9 changed files with 45 additions and 32 deletions

View file

@ -48,24 +48,29 @@ void EmuThread::run() {
MicroProfileOnThreadCreate(name.c_str());
Common::SetCurrentThreadName(name.c_str());
auto& system = Core::System::GetInstance();
system.RegisterHostThread();
auto& gpu = system.GPU();
// Main process has been loaded. Make the context current to this thread and begin GPU and CPU
// execution.
Core::System::GetInstance().GPU().Start();
gpu.Start();
gpu.ObtainContext();
emit LoadProgress(VideoCore::LoadCallbackStage::Prepare, 0, 0);
Core::System::GetInstance().RegisterHostThread();
context.MakeCurrent();
Core::System::GetInstance().Renderer().Rasterizer().LoadDiskResources(
system.Renderer().Rasterizer().LoadDiskResources(
stop_run, [this](VideoCore::LoadCallbackStage stage, std::size_t value, std::size_t total) {
emit LoadProgress(stage, value, total);
});
emit LoadProgress(VideoCore::LoadCallbackStage::Complete, 0, 0);
context.DoneCurrent();
gpu.ReleaseContext();
// Holds whether the cpu was running during the last iteration,
// so that the DebugModeLeft signal can be emitted before the
@ -78,18 +83,18 @@ void EmuThread::run() {
}
running_guard = true;
Core::System::ResultStatus result = Core::System::GetInstance().Run();
Core::System::ResultStatus result = system.Run();
if (result != Core::System::ResultStatus::Success) {
running_guard = false;
this->SetRunning(false);
emit ErrorThrown(result, Core::System::GetInstance().GetStatusDetails());
emit ErrorThrown(result, system.GetStatusDetails());
}
running_wait.Wait();
result = Core::System::GetInstance().Pause();
result = system.Pause();
if (result != Core::System::ResultStatus::Success) {
running_guard = false;
this->SetRunning(false);
emit ErrorThrown(result, Core::System::GetInstance().GetStatusDetails());
emit ErrorThrown(result, system.GetStatusDetails());
}
running_guard = false;
@ -106,7 +111,7 @@ void EmuThread::run() {
}
// Shutdown the core emulation
Core::System::GetInstance().Shutdown();
system.Shutdown();
#if MICROPROFILE_ENABLED
MicroProfileOnThreadExit();