diff --git a/.gitlab-ci.yml b/.gitlab-ci.yml index 0a251e87b9..ff4469c5ff 100755 --- a/.gitlab-ci.yml +++ b/.gitlab-ci.yml @@ -31,6 +31,7 @@ clang-format: # - Linux # - Windows - Parallelized + - Format #LINUX BUILD - BUILDS LINUX APPIMAGE build-linux: diff --git a/CMakeLists.txt b/CMakeLists.txt index 5a3f5f97d7..16f8074f0c 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -3,6 +3,9 @@ cmake_minimum_required(VERSION 3.22) +set(CMAKE_XCODE_GENERATE_TOP_LEVEL_PROJECT OFF) +set(CMAKE_XCODE_EMIT_RELATIVE_PATH YES) + project(suyu) list(APPEND CMAKE_MODULE_PATH "${CMAKE_CURRENT_SOURCE_DIR}/CMakeModules") @@ -68,7 +71,7 @@ option(SUYU_ENABLE_PORTABLE "Allow suyu to enable portable mode if a user folder CMAKE_DEPENDENT_OPTION(SUYU_USE_FASTER_LD "Check if a faster linker is available" ON "NOT WIN32" OFF) -CMAKE_DEPENDENT_OPTION(USE_SYSTEM_MOLTENVK "Use the system MoltenVK lib (instead of the bundled one)" OFF "APPLE" OFF) +CMAKE_DEPENDENT_OPTION(USE_SYSTEM_MOLTENVK "Use the system MoltenVK lib (instead of the bundled one)" OFF "APPLE" ON) option(USE_CCACHE "Use CCache for faster building" ON) diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index a5311ddf59..b9eee375ad 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -5,5 +5,5 @@ SPDX-License-Identifier: GPL-2.0-or-later Please check out the - * [Conributors's guide](https://gitlab.com/suyu-emu/suyu/-/wikis/Contributing). + * [Contributors's guide](https://gitlab.com/suyu-emu/suyu/-/wikis/Contributing). * [Merge request guidelines](https://gitlab.com/suyu-emu/suyu/-/wikis/Merge-requests) diff --git a/src/core/hle/service/am/service/common_state_getter.cpp b/src/core/hle/service/am/service/common_state_getter.cpp index f523bcd9e6..f20071156e 100644 --- a/src/core/hle/service/am/service/common_state_getter.cpp +++ b/src/core/hle/service/am/service/common_state_getter.cpp @@ -38,7 +38,7 @@ ICommonStateGetter::ICommonStateGetter(Core::System& system_, std::shared_ptr, "GetReaderLockAccessorEx"}, {32, D<&ICommonStateGetter::GetWriterLockAccessorEx>, "GetWriterLockAccessorEx"}, - {40, nullptr, "GetCradleFwVersion"}, + {40, D<&ICommonStateGetter::GetCradleFwVersion>, "GetCradleFwVersion"}, {50, D<&ICommonStateGetter::IsVrModeEnabled>, "IsVrModeEnabled"}, {51, D<&ICommonStateGetter::SetVrModeEnabled>, "SetVrModeEnabled"}, {52, D<&ICommonStateGetter::SetLcdBacklighOffEnabled>, "SetLcdBacklighOffEnabled"}, @@ -159,6 +159,17 @@ Result ICommonStateGetter::GetBootMode(Out out_boot_mode) { R_SUCCEED(); } +Result ICommonStateGetter::GetCradleFwVersion(OutArray out_version) { + LOG_DEBUG(Service_AM, "(STUBBED) called"); + + out_version[0] = 0; + out_version[1] = 0; + out_version[2] = 0; + out_version[3] = 0; + + R_SUCCEED(); +} + Result ICommonStateGetter::IsVrModeEnabled(Out out_is_vr_mode_enabled) { LOG_DEBUG(Service_AM, "called"); diff --git a/src/core/hle/service/am/service/common_state_getter.h b/src/core/hle/service/am/service/common_state_getter.h index 59a46fa94f..8c80e5bdbb 100644 --- a/src/core/hle/service/am/service/common_state_getter.h +++ b/src/core/hle/service/am/service/common_state_getter.h @@ -38,6 +38,7 @@ private: Result GetOperationMode(Out out_operation_mode); Result GetPerformanceMode(Out out_performance_mode); Result GetBootMode(Out out_boot_mode); + Result GetCradleFwVersion(OutArray out_version); Result IsVrModeEnabled(Out out_is_vr_mode_enabled); Result SetVrModeEnabled(bool is_vr_mode_enabled); Result SetLcdBacklighOffEnabled(bool is_lcd_backlight_off_enabled); diff --git a/src/core/hle/service/am/service/global_state_controller.cpp b/src/core/hle/service/am/service/global_state_controller.cpp index 3e3b61b0a0..aa8f852fea 100644 --- a/src/core/hle/service/am/service/global_state_controller.cpp +++ b/src/core/hle/service/am/service/global_state_controller.cpp @@ -14,7 +14,7 @@ IGlobalStateController::IGlobalStateController(Core::System& system_) static const FunctionInfo functions[] = { {0, nullptr, "RequestToEnterSleep"}, {1, nullptr, "EnterSleep"}, - {2, nullptr, "StartSleepSequence"}, + {2, D<&IGlobalStateController::StartSleepSequence>, "StartSleepSequence"}, {3, D<&IGlobalStateController::StartShutdownSequence>, "StartShutdownSequence"}, {4, D<&IGlobalStateController::StartRebootSequence>, "StartRebootSequence"}, {9, nullptr, "IsAutoPowerDownRequested"}, @@ -31,6 +31,13 @@ IGlobalStateController::IGlobalStateController(Core::System& system_) RegisterHandlers(functions); } +IGlobalStateController::~IGlobalStateController() = default; + +Result IGlobalStateController::StartSleepSequence(u8 a) { + LOG_WARNING(Service_AM, "(STUBBED) called, a={}", a); + R_SUCCEED(); +} + Result IGlobalStateController::StartShutdownSequence() { LOG_INFO(Service_AM, "called"); system.Exit(); @@ -43,8 +50,6 @@ Result IGlobalStateController::StartRebootSequence() { R_SUCCEED(); } -IGlobalStateController::~IGlobalStateController() = default; - Result IGlobalStateController::LoadAndApplyIdlePolicySettings() { LOG_WARNING(Service_AM, "(STUBBED) called"); R_SUCCEED(); diff --git a/src/core/hle/service/am/service/global_state_controller.h b/src/core/hle/service/am/service/global_state_controller.h index 83efb57dfc..e0f1d46cc1 100644 --- a/src/core/hle/service/am/service/global_state_controller.h +++ b/src/core/hle/service/am/service/global_state_controller.h @@ -18,6 +18,7 @@ public: ~IGlobalStateController() override; private: + Result StartSleepSequence(u8 a); Result StartShutdownSequence(); Result StartRebootSequence(); Result LoadAndApplyIdlePolicySettings(); diff --git a/src/core/hle/service/am/service/home_menu_functions.cpp b/src/core/hle/service/am/service/home_menu_functions.cpp index 25f78beb5a..f17a8522fb 100644 --- a/src/core/hle/service/am/service/home_menu_functions.cpp +++ b/src/core/hle/service/am/service/home_menu_functions.cpp @@ -23,7 +23,7 @@ IHomeMenuFunctions::IHomeMenuFunctions(Core::System& system_, std::shared_ptr, "GetPopFromGeneralChannelEvent"}, {30, nullptr, "GetHomeButtonWriterLockAccessor"}, {31, nullptr, "GetWriterLockAccessorEx"}, - {40, nullptr, "IsSleepEnabled"}, + {40, D<&IHomeMenuFunctions::IsSleepEnabled>, "IsSleepEnabled"}, {41, D<&IHomeMenuFunctions::IsRebootEnabled>, "IsRebootEnabled"}, {50, nullptr, "LaunchSystemApplet"}, {51, nullptr, "LaunchStarter"}, @@ -64,9 +64,15 @@ Result IHomeMenuFunctions::GetPopFromGeneralChannelEvent( R_SUCCEED(); } -Result IHomeMenuFunctions::IsRebootEnabled(Out out_is_reboot_enbaled) { +Result IHomeMenuFunctions::IsSleepEnabled(Out out_is_sleep_enabled) { LOG_INFO(Service_AM, "called"); - *out_is_reboot_enbaled = true; + *out_is_sleep_enabled = true; + R_SUCCEED(); +} + +Result IHomeMenuFunctions::IsRebootEnabled(Out out_is_reboot_enabled) { + LOG_INFO(Service_AM, "called"); + *out_is_reboot_enabled = true; R_SUCCEED(); } diff --git a/src/core/hle/service/am/service/home_menu_functions.h b/src/core/hle/service/am/service/home_menu_functions.h index f56094aa9d..28ed9bf0ec 100644 --- a/src/core/hle/service/am/service/home_menu_functions.h +++ b/src/core/hle/service/am/service/home_menu_functions.h @@ -24,7 +24,8 @@ private: Result LockForeground(); Result UnlockForeground(); Result GetPopFromGeneralChannelEvent(OutCopyHandle out_event); - Result IsRebootEnabled(Out out_is_reboot_enbaled); + Result IsSleepEnabled(Out out_is_sleep_enabled); + Result IsRebootEnabled(Out out_is_reboot_enabled); Result IsForceTerminateApplicationDisabledForDebug( Out out_is_force_terminate_application_disabled_for_debug); diff --git a/src/core/hle/service/filesystem/fsp/fsp_srv.cpp b/src/core/hle/service/filesystem/fsp/fsp_srv.cpp index 60290f1a6e..2bc6361bb7 100644 --- a/src/core/hle/service/filesystem/fsp/fsp_srv.cpp +++ b/src/core/hle/service/filesystem/fsp/fsp_srv.cpp @@ -67,7 +67,7 @@ FSP_SRV::FSP_SRV(Core::System& system_) {24, nullptr, "RegisterSaveDataFileSystemAtomicDeletion"}, {25, nullptr, "DeleteSaveDataFileSystemBySaveDataSpaceId"}, {26, nullptr, "FormatSdCardDryRun"}, - {27, nullptr, "IsExFatSupported"}, + {27, D<&FSP_SRV::IsExFatSupported>, "IsExFatSupported"}, {28, nullptr, "DeleteSaveDataFileSystemBySaveDataAttribute"}, {30, nullptr, "OpenGameCardStorage"}, {31, nullptr, "OpenGameCardFileSystem"}, @@ -235,6 +235,14 @@ Result FSP_SRV::CreateSaveDataFileSystem(FileSys::SaveDataCreationInfo save_crea save_struct)); } +Result FSP_SRV::IsExFatSupported(Out out_is_supported) { + LOG_WARNING(Service_FS, "(STUBBED) called"); + + *out_is_supported = true; + + R_SUCCEED(); +} + Result FSP_SRV::CreateSaveDataFileSystemBySystemSaveDataId( FileSys::SaveDataAttribute save_struct, FileSys::SaveDataCreationInfo save_create_struct) { LOG_DEBUG(Service_FS, "called save_struct = {}", save_struct.DebugInfo()); diff --git a/src/core/hle/service/filesystem/fsp/fsp_srv.h b/src/core/hle/service/filesystem/fsp/fsp_srv.h index b565cace04..865fdae7c4 100644 --- a/src/core/hle/service/filesystem/fsp/fsp_srv.h +++ b/src/core/hle/service/filesystem/fsp/fsp_srv.h @@ -53,6 +53,7 @@ private: Result OpenSdCardFileSystem(OutInterface out_interface); Result CreateSaveDataFileSystem(FileSys::SaveDataCreationInfo save_create_struct, FileSys::SaveDataAttribute save_struct, u128 uid); + Result IsExFatSupported(Out out_is_supported); Result CreateSaveDataFileSystemBySystemSaveDataId( FileSys::SaveDataAttribute save_struct, FileSys::SaveDataCreationInfo save_create_struct); Result OpenSaveDataFileSystem(OutInterface out_interface, diff --git a/src/core/hle/service/ldn/sf_monitor_service.cpp b/src/core/hle/service/ldn/sf_monitor_service.cpp index 9e6736ff2c..0a23d6b8ea 100644 --- a/src/core/hle/service/ldn/sf_monitor_service.cpp +++ b/src/core/hle/service/ldn/sf_monitor_service.cpp @@ -30,10 +30,10 @@ Result ISfMonitorService::Initialize(Out out_value) { } Result ISfMonitorService::GetGroupInfo( - OutLargeData out_group_info) { + GroupInfo in_group_info, OutLargeData out_group_info) { LOG_WARNING(Service_LDN, "(STUBBED) called"); - *out_group_info = GroupInfo{}; + memcpy(out_group_info, &in_group_info, sizeof(GroupInfo)); R_SUCCEED(); } diff --git a/src/core/hle/service/ldn/sf_monitor_service.h b/src/core/hle/service/ldn/sf_monitor_service.h index d021152010..5878b030c2 100644 --- a/src/core/hle/service/ldn/sf_monitor_service.h +++ b/src/core/hle/service/ldn/sf_monitor_service.h @@ -20,7 +20,8 @@ public: private: Result Initialize(Out out_value); - Result GetGroupInfo(OutLargeData out_group_info); + Result GetGroupInfo(GroupInfo in_group_info, + OutLargeData out_group_info); }; } // namespace Service::LDN diff --git a/src/core/hle/service/ldn/sf_service_monitor.cpp b/src/core/hle/service/ldn/sf_service_monitor.cpp index 33e3c1d69a..e35754d127 100644 --- a/src/core/hle/service/ldn/sf_service_monitor.cpp +++ b/src/core/hle/service/ldn/sf_service_monitor.cpp @@ -40,10 +40,10 @@ Result ISfServiceMonitor::Initialize(Out out_value) { } Result ISfServiceMonitor::GetGroupInfo( - OutLargeData out_group_info) { + GroupInfo in_group_info, OutLargeData out_group_info) { LOG_WARNING(Service_LDN, "(STUBBED) called"); - *out_group_info = GroupInfo{}; + memcpy(out_group_info, &in_group_info, sizeof(GroupInfo)); R_SUCCEED(); } diff --git a/src/core/hle/service/ldn/sf_service_monitor.h b/src/core/hle/service/ldn/sf_service_monitor.h index 3cfc5005eb..90cdd5cdd4 100644 --- a/src/core/hle/service/ldn/sf_service_monitor.h +++ b/src/core/hle/service/ldn/sf_service_monitor.h @@ -20,7 +20,8 @@ public: private: Result Initialize(Out out_value); - Result GetGroupInfo(OutLargeData out_group_info); + Result GetGroupInfo(GroupInfo in_group_info, + OutLargeData out_group_info); }; } // namespace Service::LDN diff --git a/src/core/hle/service/nifm/nifm.cpp b/src/core/hle/service/nifm/nifm.cpp index 060fe86dd8..2202e3d899 100644 --- a/src/core/hle/service/nifm/nifm.cpp +++ b/src/core/hle/service/nifm/nifm.cpp @@ -507,7 +507,7 @@ void IGeneralService::GetCurrentIpConfigInfo(HLERequestContext& ctx) { } void IGeneralService::IsWirelessCommunicationEnabled(HLERequestContext& ctx) { - LOG_WARNING(Service_NIFM, "(STUBBED) called"); + LOG_WARNING(Service_NIFM, "called"); IPC::ResponseBuilder rb{ctx, 3}; rb.Push(ResultSuccess); diff --git a/src/core/hle/service/set/settings_types.h b/src/core/hle/service/set/settings_types.h index 848722e196..8cf34efc1a 100644 --- a/src/core/hle/service/set/settings_types.h +++ b/src/core/hle/service/set/settings_types.h @@ -509,4 +509,13 @@ struct TvSettings { }; static_assert(sizeof(TvSettings) == 0x20, "TvSettings is an invalid size"); +/// This is nn::settings::system::RebootlessSystemUpdateVersion +struct RebootlessSystemUpdateVersion { + u32 version; + u8 reserved[0x1c]; + char display_version[0x20]; +}; +static_assert(sizeof(RebootlessSystemUpdateVersion) == 0x40, + "RebootlessSystemUpdateVersion is an invalid size"); + } // namespace Service::Set diff --git a/src/core/hle/service/set/system_settings_server.cpp b/src/core/hle/service/set/system_settings_server.cpp index a5a39fcc2b..254fdd2e96 100644 --- a/src/core/hle/service/set/system_settings_server.cpp +++ b/src/core/hle/service/set/system_settings_server.cpp @@ -238,7 +238,7 @@ ISystemSettingsServer::ISystemSettingsServer(Core::System& system_) {146, nullptr, "SetConsoleSixAxisSensorAngularVelocityTimeBias"}, {147, nullptr, "GetConsoleSixAxisSensorAngularAcceleration"}, {148, nullptr, "SetConsoleSixAxisSensorAngularAcceleration"}, - {149, nullptr, "GetRebootlessSystemUpdateVersion"}, + {149, C<&ISystemSettingsServer::GetRebootlessSystemUpdateVersion>, "GetRebootlessSystemUpdateVersion"}, {150, C<&ISystemSettingsServer::GetDeviceTimeZoneLocationUpdatedTime>, "GetDeviceTimeZoneLocationUpdatedTime"}, {151, C<&ISystemSettingsServer::SetDeviceTimeZoneLocationUpdatedTime>, "SetDeviceTimeZoneLocationUpdatedTime"}, {152, C<&ISystemSettingsServer::GetUserSystemClockAutomaticCorrectionUpdatedTime>, "GetUserSystemClockAutomaticCorrectionUpdatedTime"}, @@ -1194,6 +1194,16 @@ Result ISystemSettingsServer::SetKeyboardLayout(KeyboardLayout keyboard_layout) R_SUCCEED(); } +Result ISystemSettingsServer::GetRebootlessSystemUpdateVersion( + Out out_rebootless_system_update) { + LOG_INFO(Service_SET, "(STUBBED) called"); + + out_rebootless_system_update->version = 0; + strcpy(out_rebootless_system_update->display_version, "0.0.0"); + + R_SUCCEED(); +} + Result ISystemSettingsServer::GetDeviceTimeZoneLocationUpdatedTime( Out out_time_point) { LOG_INFO(Service_SET, "called"); diff --git a/src/core/hle/service/set/system_settings_server.h b/src/core/hle/service/set/system_settings_server.h index 993e5de7d0..7e16300c30 100644 --- a/src/core/hle/service/set/system_settings_server.h +++ b/src/core/hle/service/set/system_settings_server.h @@ -136,6 +136,8 @@ public: Result SetAppletLaunchFlags(u32 applet_launch_flag); Result GetKeyboardLayout(Out out_keyboard_layout); Result SetKeyboardLayout(KeyboardLayout keyboard_layout); + Result GetRebootlessSystemUpdateVersion( + Out out_rebootless_system_update); Result GetDeviceTimeZoneLocationUpdatedTime( Out out_time_point); Result SetDeviceTimeZoneLocationUpdatedTime( diff --git a/src/video_core/CMakeLists.txt b/src/video_core/CMakeLists.txt index 95e46eebf2..de28bf92ba 100644 --- a/src/video_core/CMakeLists.txt +++ b/src/video_core/CMakeLists.txt @@ -9,7 +9,7 @@ if(LIBVA_FOUND) list(APPEND FFmpeg_LIBRARIES ${LIBVA_LIBRARIES}) endif() -add_library(video_core STATIC +set(sources buffer_cache/buffer_base.h buffer_cache/buffer_cache_base.h buffer_cache/buffer_cache.cpp @@ -315,6 +315,67 @@ add_library(video_core STATIC vulkan_common/vulkan.h ) +if (APPLE) + list(REMOVE_ITEM sources + renderer_opengl/present/filters.cpp + renderer_opengl/present/filters.h + renderer_opengl/present/fsr.cpp + renderer_opengl/present/fsr.h + renderer_opengl/present/fxaa.cpp + renderer_opengl/present/fxaa.h + renderer_opengl/present/layer.cpp + renderer_opengl/present/layer.h + renderer_opengl/present/present_uniforms.h + renderer_opengl/present/smaa.cpp + renderer_opengl/present/smaa.h + renderer_opengl/present/util.h + renderer_opengl/present/window_adapt_pass.cpp + renderer_opengl/present/window_adapt_pass.h + renderer_opengl/blit_image.cpp + renderer_opengl/blit_image.h + renderer_opengl/gl_blit_screen.cpp + renderer_opengl/gl_blit_screen.h + renderer_opengl/gl_buffer_cache_base.cpp + renderer_opengl/gl_buffer_cache.cpp + renderer_opengl/gl_buffer_cache.h + renderer_opengl/gl_compute_pipeline.cpp + renderer_opengl/gl_compute_pipeline.h + renderer_opengl/gl_device.cpp + renderer_opengl/gl_device.h + renderer_opengl/gl_fence_manager.cpp + renderer_opengl/gl_fence_manager.h + renderer_opengl/gl_graphics_pipeline.cpp + renderer_opengl/gl_graphics_pipeline.h + renderer_opengl/gl_rasterizer.cpp + renderer_opengl/gl_rasterizer.h + renderer_opengl/gl_resource_manager.cpp + renderer_opengl/gl_resource_manager.h + renderer_opengl/gl_shader_cache.cpp + renderer_opengl/gl_shader_cache.h + renderer_opengl/gl_shader_manager.cpp + renderer_opengl/gl_shader_manager.h + renderer_opengl/gl_shader_context.h + renderer_opengl/gl_shader_util.cpp + renderer_opengl/gl_shader_util.h + renderer_opengl/gl_state_tracker.cpp + renderer_opengl/gl_state_tracker.h + renderer_opengl/gl_staging_buffer_pool.cpp + renderer_opengl/gl_staging_buffer_pool.h + renderer_opengl/gl_texture_cache.cpp + renderer_opengl/gl_texture_cache.h + renderer_opengl/gl_texture_cache_base.cpp + renderer_opengl/gl_query_cache.cpp + renderer_opengl/gl_query_cache.h + renderer_opengl/maxwell_to_gl.h + renderer_opengl/renderer_opengl.cpp + renderer_opengl/renderer_opengl.h + renderer_opengl/util_shaders.cpp + renderer_opengl/util_shaders.h + ) +endif() + +add_library(video_core STATIC ${sources}) + target_link_libraries(video_core PUBLIC common core) target_link_libraries(video_core PUBLIC glad shader_recompiler stb bc_decoder) diff --git a/src/video_core/video_core.cpp b/src/video_core/video_core.cpp index fba258113d..509ba8a5b4 100644 --- a/src/video_core/video_core.cpp +++ b/src/video_core/video_core.cpp @@ -21,9 +21,15 @@ std::unique_ptr CreateRenderer( auto& device_memory = system.Host1x().MemoryManager(); switch (Settings::values.renderer_backend.GetValue()) { +#ifdef __APPLE__ + // do nothing for now, include metal in here at later date. +#else + // openGL, not supported on Apple so not bothering to include if macos case Settings::RendererBackend::OpenGL: return std::make_unique(emu_window, device_memory, gpu, std::move(context)); +#endif + // common renderers case Settings::RendererBackend::Vulkan: return std::make_unique(emu_window, device_memory, gpu, std::move(context)); diff --git a/src/video_core/vulkan_common/vulkan.h b/src/video_core/vulkan_common/vulkan.h index 62aa132915..26b9054886 100644 --- a/src/video_core/vulkan_common/vulkan.h +++ b/src/video_core/vulkan_common/vulkan.h @@ -15,7 +15,11 @@ #define VK_USE_PLATFORM_WAYLAND_KHR #endif +#ifdef __APPLE__ +#include +#else #include +#endif // Sanitize macros #undef CreateEvent