diff options
Diffstat (limited to 'src/yuzu_cmd/yuzu.cpp')
| -rw-r--r-- | src/yuzu_cmd/yuzu.cpp | 30 |
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(); |