summaryrefslogtreecommitdiff
path: root/src/yuzu_cmd/yuzu.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/yuzu_cmd/yuzu.cpp')
-rw-r--r--src/yuzu_cmd/yuzu.cpp30
1 files changed, 17 insertions, 13 deletions
diff --git a/src/yuzu_cmd/yuzu.cpp b/src/yuzu_cmd/yuzu.cpp
index 4d2ea7e9e..14a23c71b 100644
--- a/src/yuzu_cmd/yuzu.cpp
+++ b/src/yuzu_cmd/yuzu.cpp
@@ -2,6 +2,7 @@
2// Licensed under GPLv2 or any later version 2// Licensed under GPLv2 or any later version
3// Refer to the license.txt file included. 3// Refer to the license.txt file included.
4 4
5#include <chrono>
5#include <iostream> 6#include <iostream>
6#include <memory> 7#include <memory>
7#include <string> 8#include <string>
@@ -22,12 +23,15 @@
22#include "common/telemetry.h" 23#include "common/telemetry.h"
23#include "core/core.h" 24#include "core/core.h"
24#include "core/crypto/key_manager.h" 25#include "core/crypto/key_manager.h"
26#include "core/file_sys/registered_cache.h"
25#include "core/file_sys/vfs_real.h" 27#include "core/file_sys/vfs_real.h"
26#include "core/gdbstub/gdbstub.h" 28#include "core/gdbstub/gdbstub.h"
29#include "core/hle/kernel/process.h"
27#include "core/hle/service/filesystem/filesystem.h" 30#include "core/hle/service/filesystem/filesystem.h"
28#include "core/loader/loader.h" 31#include "core/loader/loader.h"
29#include "core/settings.h" 32#include "core/settings.h"
30#include "core/telemetry_session.h" 33#include "core/telemetry_session.h"
34#include "input_common/main.h"
31#include "video_core/renderer_base.h" 35#include "video_core/renderer_base.h"
32#include "yuzu_cmd/config.h" 36#include "yuzu_cmd/config.h"
33#include "yuzu_cmd/emu_window/emu_window_sdl2.h" 37#include "yuzu_cmd/emu_window/emu_window_sdl2.h"
@@ -36,8 +40,6 @@
36#include "yuzu_cmd/emu_window/emu_window_sdl2_vk.h" 40#include "yuzu_cmd/emu_window/emu_window_sdl2_vk.h"
37#endif 41#endif
38 42
39#include "core/file_sys/registered_cache.h"
40
41#ifdef _WIN32 43#ifdef _WIN32
42// windows.h needs to be included before shellapi.h 44// windows.h needs to be included before shellapi.h
43#include <windows.h> 45#include <windows.h>
@@ -81,8 +83,8 @@ static void InitializeLogging() {
81 83
82 Log::AddBackend(std::make_unique<Log::ColorConsoleBackend>()); 84 Log::AddBackend(std::make_unique<Log::ColorConsoleBackend>());
83 85
84 const std::string& log_dir = FileUtil::GetUserPath(FileUtil::UserPath::LogDir); 86 const std::string& log_dir = Common::FS::GetUserPath(Common::FS::UserPath::LogDir);
85 FileUtil::CreateFullPath(log_dir); 87 Common::FS::CreateFullPath(log_dir);
86 Log::AddBackend(std::make_unique<Log::FileBackend>(log_dir + LOG_FILE)); 88 Log::AddBackend(std::make_unique<Log::FileBackend>(log_dir + LOG_FILE));
87#ifdef _WIN32 89#ifdef _WIN32
88 Log::AddBackend(std::make_unique<Log::DebuggerBackend>()); 90 Log::AddBackend(std::make_unique<Log::DebuggerBackend>());
@@ -178,15 +180,16 @@ int main(int argc, char** argv) {
178 Settings::Apply(); 180 Settings::Apply();
179 181
180 Core::System& system{Core::System::GetInstance()}; 182 Core::System& system{Core::System::GetInstance()};
183 InputCommon::InputSubsystem input_subsystem;
181 184
182 std::unique_ptr<EmuWindow_SDL2> emu_window; 185 std::unique_ptr<EmuWindow_SDL2> emu_window;
183 switch (Settings::values.renderer_backend) { 186 switch (Settings::values.renderer_backend.GetValue()) {
184 case Settings::RendererBackend::OpenGL: 187 case Settings::RendererBackend::OpenGL:
185 emu_window = std::make_unique<EmuWindow_SDL2_GL>(system, fullscreen); 188 emu_window = std::make_unique<EmuWindow_SDL2_GL>(&input_subsystem, fullscreen);
186 break; 189 break;
187 case Settings::RendererBackend::Vulkan: 190 case Settings::RendererBackend::Vulkan:
188#ifdef HAS_VULKAN 191#ifdef HAS_VULKAN
189 emu_window = std::make_unique<EmuWindow_SDL2_VK>(system, fullscreen); 192 emu_window = std::make_unique<EmuWindow_SDL2_VK>(&input_subsystem);
190 break; 193 break;
191#else 194#else
192 LOG_CRITICAL(Frontend, "Vulkan backend has not been compiled!"); 195 LOG_CRITICAL(Frontend, "Vulkan backend has not been compiled!");
@@ -228,19 +231,20 @@ int main(int argc, char** argv) {
228 } 231 }
229 } 232 }
230 233
231 system.TelemetrySession().AddField(Telemetry::FieldType::App, "Frontend", "SDL"); 234 system.TelemetrySession().AddField(Common::Telemetry::FieldType::App, "Frontend", "SDL");
232 235
233 // Core is loaded, start the GPU (makes the GPU contexts current to this thread) 236 // Core is loaded, start the GPU (makes the GPU contexts current to this thread)
234 system.GPU().Start(); 237 system.GPU().Start();
235 238
236 system.Renderer().Rasterizer().LoadDiskResources(); 239 system.Renderer().Rasterizer().LoadDiskResources(
240 system.CurrentProcess()->GetTitleID(), false,
241 [](VideoCore::LoadCallbackStage, size_t value, size_t total) {});
237 242
238 std::thread render_thread([&emu_window] { emu_window->Present(); }); 243 void(system.Run());
239 while (emu_window->IsOpen()) { 244 while (emu_window->IsOpen()) {
240 system.RunLoop(); 245 std::this_thread::sleep_for(std::chrono::milliseconds(1));
241 } 246 }
242 render_thread.join(); 247 void(system.Pause());
243
244 system.Shutdown(); 248 system.Shutdown();
245 249
246 detached_tasks.WaitForAllTasks(); 250 detached_tasks.WaitForAllTasks();