diff options
| author | 2020-04-02 01:38:25 -0300 | |
|---|---|---|
| committer | 2020-04-02 01:38:25 -0300 | |
| commit | 825a6e2615f86742b2e5182af1329da4a2bae413 (patch) | |
| tree | 0b5d26f82b65067f0562b14a65b0d34aba688e01 /src/core/core.cpp | |
| parent | Merge pull request #3591 from ReinUsesLisp/vk-wrapper-part2 (diff) | |
| parent | Frontend: Don't call DoneCurrent if the context isnt already current (diff) | |
| download | yuzu-825a6e2615f86742b2e5182af1329da4a2bae413.tar.gz yuzu-825a6e2615f86742b2e5182af1329da4a2bae413.tar.xz yuzu-825a6e2615f86742b2e5182af1329da4a2bae413.zip | |
Merge pull request #3552 from jroweboy/single-context
Refactor Context management (Fixes renderdoc on opengl issues)
Diffstat (limited to 'src/core/core.cpp')
| -rw-r--r-- | src/core/core.cpp | 22 |
1 files changed, 6 insertions, 16 deletions
diff --git a/src/core/core.cpp b/src/core/core.cpp index d1bc9340d..3bd90d79f 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp | |||
| @@ -24,7 +24,6 @@ | |||
| 24 | #include "core/file_sys/sdmc_factory.h" | 24 | #include "core/file_sys/sdmc_factory.h" |
| 25 | #include "core/file_sys/vfs_concat.h" | 25 | #include "core/file_sys/vfs_concat.h" |
| 26 | #include "core/file_sys/vfs_real.h" | 26 | #include "core/file_sys/vfs_real.h" |
| 27 | #include "core/frontend/scope_acquire_context.h" | ||
| 28 | #include "core/gdbstub/gdbstub.h" | 27 | #include "core/gdbstub/gdbstub.h" |
| 29 | #include "core/hardware_interrupt_manager.h" | 28 | #include "core/hardware_interrupt_manager.h" |
| 30 | #include "core/hle/kernel/client_port.h" | 29 | #include "core/hle/kernel/client_port.h" |
| @@ -168,13 +167,12 @@ struct System::Impl { | |||
| 168 | Service::Init(service_manager, system); | 167 | Service::Init(service_manager, system); |
| 169 | GDBStub::DeferStart(); | 168 | GDBStub::DeferStart(); |
| 170 | 169 | ||
| 171 | renderer = VideoCore::CreateRenderer(emu_window, system); | 170 | interrupt_manager = std::make_unique<Core::Hardware::InterruptManager>(system); |
| 172 | if (!renderer->Init()) { | 171 | gpu_core = VideoCore::CreateGPU(emu_window, system); |
| 172 | if (!gpu_core) { | ||
| 173 | return ResultStatus::ErrorVideoCore; | 173 | return ResultStatus::ErrorVideoCore; |
| 174 | } | 174 | } |
| 175 | interrupt_manager = std::make_unique<Core::Hardware::InterruptManager>(system); | 175 | gpu_core->Renderer().Rasterizer().SetupDirtyFlags(); |
| 176 | gpu_core = VideoCore::CreateGPU(system); | ||
| 177 | renderer->Rasterizer().SetupDirtyFlags(); | ||
| 178 | 176 | ||
| 179 | is_powered_on = true; | 177 | is_powered_on = true; |
| 180 | exit_lock = false; | 178 | exit_lock = false; |
| @@ -186,8 +184,6 @@ struct System::Impl { | |||
| 186 | 184 | ||
| 187 | ResultStatus Load(System& system, Frontend::EmuWindow& emu_window, | 185 | ResultStatus Load(System& system, Frontend::EmuWindow& emu_window, |
| 188 | const std::string& filepath) { | 186 | const std::string& filepath) { |
| 189 | Core::Frontend::ScopeAcquireContext acquire_context{emu_window}; | ||
| 190 | |||
| 191 | app_loader = Loader::GetLoader(GetGameFileFromPath(virtual_filesystem, filepath)); | 187 | app_loader = Loader::GetLoader(GetGameFileFromPath(virtual_filesystem, filepath)); |
| 192 | if (!app_loader) { | 188 | if (!app_loader) { |
| 193 | LOG_CRITICAL(Core, "Failed to obtain loader for {}!", filepath); | 189 | LOG_CRITICAL(Core, "Failed to obtain loader for {}!", filepath); |
| @@ -216,10 +212,6 @@ struct System::Impl { | |||
| 216 | AddGlueRegistrationForProcess(*app_loader, *main_process); | 212 | AddGlueRegistrationForProcess(*app_loader, *main_process); |
| 217 | kernel.MakeCurrentProcess(main_process.get()); | 213 | kernel.MakeCurrentProcess(main_process.get()); |
| 218 | 214 | ||
| 219 | // Main process has been loaded and been made current. | ||
| 220 | // Begin GPU and CPU execution. | ||
| 221 | gpu_core->Start(); | ||
| 222 | |||
| 223 | // Initialize cheat engine | 215 | // Initialize cheat engine |
| 224 | if (cheat_engine) { | 216 | if (cheat_engine) { |
| 225 | cheat_engine->Initialize(); | 217 | cheat_engine->Initialize(); |
| @@ -277,7 +269,6 @@ struct System::Impl { | |||
| 277 | } | 269 | } |
| 278 | 270 | ||
| 279 | // Shutdown emulation session | 271 | // Shutdown emulation session |
| 280 | renderer.reset(); | ||
| 281 | GDBStub::Shutdown(); | 272 | GDBStub::Shutdown(); |
| 282 | Service::Shutdown(); | 273 | Service::Shutdown(); |
| 283 | service_manager.reset(); | 274 | service_manager.reset(); |
| @@ -353,7 +344,6 @@ struct System::Impl { | |||
| 353 | Service::FileSystem::FileSystemController fs_controller; | 344 | Service::FileSystem::FileSystemController fs_controller; |
| 354 | /// AppLoader used to load the current executing application | 345 | /// AppLoader used to load the current executing application |
| 355 | std::unique_ptr<Loader::AppLoader> app_loader; | 346 | std::unique_ptr<Loader::AppLoader> app_loader; |
| 356 | std::unique_ptr<VideoCore::RendererBase> renderer; | ||
| 357 | std::unique_ptr<Tegra::GPU> gpu_core; | 347 | std::unique_ptr<Tegra::GPU> gpu_core; |
| 358 | std::unique_ptr<Hardware::InterruptManager> interrupt_manager; | 348 | std::unique_ptr<Hardware::InterruptManager> interrupt_manager; |
| 359 | Memory::Memory memory; | 349 | Memory::Memory memory; |
| @@ -536,11 +526,11 @@ const Core::Hardware::InterruptManager& System::InterruptManager() const { | |||
| 536 | } | 526 | } |
| 537 | 527 | ||
| 538 | VideoCore::RendererBase& System::Renderer() { | 528 | VideoCore::RendererBase& System::Renderer() { |
| 539 | return *impl->renderer; | 529 | return impl->gpu_core->Renderer(); |
| 540 | } | 530 | } |
| 541 | 531 | ||
| 542 | const VideoCore::RendererBase& System::Renderer() const { | 532 | const VideoCore::RendererBase& System::Renderer() const { |
| 543 | return *impl->renderer; | 533 | return impl->gpu_core->Renderer(); |
| 544 | } | 534 | } |
| 545 | 535 | ||
| 546 | Kernel::KernelCore& System::Kernel() { | 536 | Kernel::KernelCore& System::Kernel() { |