summaryrefslogtreecommitdiff
path: root/src/core/core.cpp
diff options
context:
space:
mode:
authorGravatar Rodrigo Locatti2020-04-02 01:38:25 -0300
committerGravatar GitHub2020-04-02 01:38:25 -0300
commit825a6e2615f86742b2e5182af1329da4a2bae413 (patch)
tree0b5d26f82b65067f0562b14a65b0d34aba688e01 /src/core/core.cpp
parentMerge pull request #3591 from ReinUsesLisp/vk-wrapper-part2 (diff)
parentFrontend: Don't call DoneCurrent if the context isnt already current (diff)
downloadyuzu-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.cpp22
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
538VideoCore::RendererBase& System::Renderer() { 528VideoCore::RendererBase& System::Renderer() {
539 return *impl->renderer; 529 return impl->gpu_core->Renderer();
540} 530}
541 531
542const VideoCore::RendererBase& System::Renderer() const { 532const VideoCore::RendererBase& System::Renderer() const {
543 return *impl->renderer; 533 return impl->gpu_core->Renderer();
544} 534}
545 535
546Kernel::KernelCore& System::Kernel() { 536Kernel::KernelCore& System::Kernel() {