aboutsummaryrefslogtreecommitdiff
path: root/Ryujinx.HLE/HOS
AgeCommit message (Collapse)Author
2021-11-01hle: Make Ryujinx.HLE project entirely safe (#2789)Mary
* Remove a bit of unsafety around * Regenerate StructArrayHelpers with a max element value of 256 * hle: remove unsafe marker from all struct that had it * hle: make SoftwareKeyboardRenderer.TryCopyTo safe * hle: remove unsafety in NpadDevice and remove AllowUnsafeBlocks from csproj * Revert "Regenerate StructArrayHelpers with a max element value of 256" This reverts commit f32a6e5be094f50571970eb1116b65c080781d05. * Introduce ByteArray of various size and use that instead of ArrayXXX to avoid stackoverflow in .NET runtime type resolution * Use ByteArray more * Add some missing spaces on Pack = 1 for various structs * Fix broken logic for TryCopyTo * Address gdkchan's comment * Address gdkchan's comment
2021-11-01When waiting on CPU, do not return a time out error from EventWait (#2780)gdkchan
* When waiting on CPU, do not return a time out error from EventWait * And while I'm at it...
2021-10-28Add support for the brazilian portuguese language code (#2792)gdkchan
* Add support for the brazilian portuguese language code * Fix error applet message
2021-10-24kernel: Fix inverted condition on permission check of SetMemoryPermission ↵Mary
syscall (#2777) * kernel: Fix inverted condition on permission check of SetMemoryPermission syscall * Fix condition for real..
2021-10-24hle: Improve safety (#2778)Mary
* timezone: Make timezone implementation safe * hle: Do not use TrimEnd to parse ASCII strings This adds an util that handle reading an ASCII string in a safe way. Previously it was possible to read malformed data that could cause various undefined behaviours in multiple services. * hid: Remove an useless unsafe modifier on keyboard update * Address gdkchan's comment * Address gdkchan's comment
2021-10-24kernel: Clear pages allocated with SetHeapSize (#2776)Mary
* kernel: Clear pages allocated with SetHeapSize Before this commit, all new pages allocated by SetHeapSize were not cleared by the kernel. This would cause undefined data to be pass to the userland and possibly resulting in weird memory corruption. This commit also add support for custom fill heap and ipc value (that is also supported by the official kernel) * Remove dots at the end of KPageTableBase.MapPages new documentation * Remove unused _stackFillValue
2021-10-24Fixup channel submit IOCTL syncpoint parameters (#2774)Billy Laws
* Fixup channel submit IOCTL syncpoint parameters The current arguments worked by happenstance as games only ever submit one syncpoint and request one fence back, if a game were to do something other than this then the arguments would've been parsed entirely wrong. * Address feedback
2021-10-24kernel: Add resource limit related syscalls (#2773)Mary
* kernel: Add resource limit related syscalls This commit implements all resource limit related syscalls. * Fix register mapping being wrong for SetResourceLimitLimitValue * Address gdkchan's comment
2021-10-24kernel: Implement SetMemoryPermission syscall (#2772)Mary
* kernel: Implement SetMemoryPermission syscall This commit implement the SetMemoryPermission syscall accurately. This also fix KMemoryPermission not being an unsigned 32 bits type and add the "DontCare" bit (used by shared memory, currently unused in Ryujinx) * Update MemoryPermission mask * Address gdkchan's comments * Fix a nit * Address gdkchan's comment
2021-10-24kernel: Add missing address space check in SetMemoryAttribute syscall (#2771)Mary
2021-10-19EventWait should not signal the event when it returns Success (#2739)gdkchan
* Fix race when EventWait is called and a wait is done on the CPU * This is useless now * Fix EventSignal * Ensure the signal belongs to the current fence, to avoid stale signals
2021-10-13Fix regression with foreground software keyboard (#2732)Caian Benedicto
2021-10-12Enqueue frame before signalling the frame is ready. (#2722)riperiperi
It seems that certain games (Link's Awakening, Xenoblade DE) had their fences reached already when posting framebuffers, so the signal that a frame was ready would go out _before_ the frame was enqueued, and the render loop would fail to dequeue anything and "skip" a frame. This was resulting in their performance lowering dramatically after some loading transitions, as a frame signal would be consumed and presentation would be one frame behind. It's possible this might have eventually caused deadlocks in these games or others, if it happened twice.
2021-10-12spl: Implement IGeneralInterface GetConfig (#2705)Ac_K
* spl: Implement IGeneralInterface GetConfig This PR implement the GetConfig call of the spl service. This is currently needed for some homebrews which currently needs Ignore Missing Service to boot. Now it's fixed. Implementation was done using Atmosphère code and REing too. * Addresses gdkchan feedback
2021-10-12Inline software keyboard without input pop up dialog (#2180)Caian Benedicto
* Initial implementation * Refactor dynamic text input keys out to facilitate configuration via UI * Fix code styling * Add per applet indirect layer handles * Remove static functions from SoftwareKeyboardRenderer * Remove inline keyboard reset delay * Remove inline keyboard V2 responses * Add inline keyboard soft-lock recovering * Add comments * Forward accept and cancel key names to the keyboard and add soft-lock prevention line * Add dummy window to handle paste events * Rework inline keyboard state machine and graphics * Implement IHostUiHandler interfaces on headless WindowBase class * Add inline keyboard assets * Fix coding style * Fix coding style * Change mode cycling shortcut to F6 * Fix invalid calc size error in games using extended calc * Remove unnecessary namespaces
2021-10-05Fix DisplayInfo struct (#2708)gdkchan
2021-09-29clkrst: Stub/Implement IClkrstManager and IClkrstSession calls (#2692)Ac_K
This PR stubs and implements some clkrst call because they are used to overclock the Switch hardware and it's pointless in our case as we emulate the system. Everything was done checked by RE. Fixes #2686
2021-09-29NVDEC (H264): Use separate contexts per channel and decode frames in DTS ↵gdkchan
order (#2671) * Use separate NVDEC contexts per channel (for FFMPEG) * Remove NVDEC -> VIC frame override hack * Add missing bottom_field_pic_order_in_frame_present_flag * Make FFMPEG logging static * nit: Remove empty lines * New FFMPEG decoding approach -- call h264_decode_frame directly, trim surface cache to reduce memory usage * Fix case * Silence warnings * PR feedback * Per-decoder rather than per-codec ownership of surfaces on the cache
2021-09-29irs: Stub some service calls (#2665)Ac_K
This PR stubs some irs service calls which are needed to get some games playable or at least bootable since we don't support IR data throught real JoyCon for now. - Stubs `IIrSensorServer` `StopImageProcessor`, `RunMomentProcessor`, `RunClusteringProcessor`, `RunImageTransferProcessor`, `GetImageTransferProcessorState`, `RunTeraPluginProcessor`. All calls are a bit checked by RE. Closes #2267, #2248, #2126 Night Vision and SpyAlarm are now bootable (but still unplayable due to the lack of the IR data):
2021-09-19amadeus: Fix regression from #2654 on ListAudioDeviceNameMary
2021-09-19vi: Unify resolutions values and accurate implementation of them. (#2640)Ac_K
* vi: Unify resolutions values and accurate implementation of them. To continue what was made in #2618, I've REd `vi` service a bit. Now values and checks related to displays are more accurate. - `am` GetDefaultDisplayResolution / GetDefaultDisplayResolutionChangeEvent have more informations on what the service does. - `vi:u/vi:m/vi:s` GetDisplayService are now accurate. - `IApplicationDisplay` GetRelayService, GetSystemDisplayService, GetManagerDisplayService, GetIndirectDisplayTransactionService, ListDisplays, OpenDisplay, OpenDefaultDisplay, CloseDisplay, GetDisplayResolution are now properly implemented. - Some other calls are cleaned or have extra checks accordingly to RE. Additionnaly, `IFriendService` have some wrong aligned things, and `pm:info` service placeholder was missing. * just use _openedDisplayInfo.Remove() * use context.Memory.Fill() * fix some casting * remove unneeded comment * cleanup * uses TryAdd * displayId > ulong * GetDisplayResolution > ulong * UL
2021-09-19amadeus: Update to REV10 (#2654)Mary
* amadeus: Update to REV10 This implements all the changes made with REV10 on 13.0.0. * Address Ack's comment * Address gdkchan's comment
2021-09-18Fix problems added by Pause (#2645)mpnico
* Disable Pause/Resume menu instead of trying to hide them * Fix Resume menu being active before renderer starts * Fix emulator not being able to close properly
2021-09-15hos: Cleanup the project (#2634)Ac_K
* hos: Cleanup the project Since a lot of changes has been done on the HOS project, there are some leftover here and there, or class just used in one service, things at wrong places, and more. This PR fixes that, additionnally to that, I've realigned some vars because I though it make the code more readable. * Address gdkchan feedback * addresses Thog feedback * Revert ElfSymbol
2021-09-11Implement GetVaRegions on nvservices (#2621)gdkchan
* Implement GetVaRegions on nvservices * This would just result in 0
2021-09-11Report 1080p resolution when in docked mode (#2618)gdkchan
2021-09-11Implement a "Pause Emulation" option & hotkey (#2428)mpnico
* Add a "Pause Emulation" option and hotkey Closes Ryujinx#1604 * Refactoring how pause is handled * Applied suggested changes from review * Applied suggested fixes * Pass correct suspend type to threads for suspend/resume * Fix NRE after stoping emulation * Removing SimulateWakeUpMessage call after resuming emulation * Skip suspending non game process * Pause the tickCounter in the ExecutionContext * Refactoring tickCounter pause/resume as suggested * Fix Config migration to add pause hotkey * Fixed pausing only application threads * Fix exiting emulator while paused * Avoid pause/resume while already paused/resumed * Cleanup unused code * Avoid restarting audio if stopping emulation while in pause. * Added suggested changes * Fix ConfigurationState
2021-08-26Bugfix LibHac update to 0.13.3 and remove SD card workaround (#2579)Alex Barney
2021-08-21Ignore exceptions when cleaning the SD card saves (#2576)Alex Barney
2021-08-20Clean the SD card save directory when opening the emulator (#2564)Alex Barney
Cleans "sdcard:/Nintendo/save" and deletes "sdcard:/save" when opening the emulator. Works around invalid encryption when keys or the SD card encryption seed are changed.
2021-08-12Update to LibHac 0.13.1 (#2475)Alex Barney
* Update to LibHac 0.13.1 * Recreate directories for indexed saves if they're missing on emulator start
2021-08-11hle: Tidy-up ServiceNotImplementedException (#2535)jduncanator
* hle: Simplify ServiceNotImplementedException This removes the need to pass in whether the command is a Tipc command or a Hipc command to the exception constructor. * hle: Use the IPC Message type to determine command type This allows differentiating between Tipc and Hipc commands when invoking a handler that supports handling both Tipc and Hipc commands.
2021-08-05Implement vibrations (#2468)mpnico
* First working vibration implementation * Fix Infinite Rumble in SDL2Mouse * Stop ignoring one vibValues every 2 * Remove RumbleInfinity as suggested * Reworked all the vibration handle / calculation * Revert HidVibrationDevicePosition changes * Add UI to enable and tune rumble * Remove some stub logs * Add PlayerIndex in rumble debug log * Fix all requested changes * Implements hid::GetVibrationDeviceInfo * Better implements HidVibrationValue.Equals/GetHashCode * Added requested changes from code review * Last fixes from review * Update configuration file version for rebase
2021-08-04Update TamperMachine and disable write-to-code prevention (#2506)Caian Benedicto
* Enable write to memory and improve logging * Update tamper machine opcodes and improve reporting * Add Else support * Add missing private statement
2021-07-24Ensure right joycon motion data is set (#2488)emmauss
* motion fix * mirror motion data on right joycon in pair mode when using native motion source * fix * addressed comments
2021-07-14Close transfer memory properly on nvservices (#2477)gdkchan
2021-07-13Revert LibHac updateMary
Users are facing save destruction on failing extra data update apparently
2021-07-13Update to LibHac 0.13.1 (#2328)Alex Barney
Update the LibHac dependency to version 0.13.1. This brings a ton of improvements and changes such as: - Refactor `FsSrv` to match the official refactoring done in FS. - Change how the `Horizon` and `HorizonClient` classes are handled. Each client created represents a different process with its own process ID and client state. - Add FS access control to handle permissions for FS service method calls. - Add FS program registry to keep track of the program ID, location and permissions of each process. - Add FS program index map info manager to track the program IDs and indexes of multi-application programs. - Add all FS IPC interfaces. - Rewrite `Fs.Fsa` code to be more accurate. - Rewrite a lot of `FsSrv` code to be more accurate. - Extend directory save data to store `SaveDataExtraData` - Extend directory save data to lock the save directory to allow only one accessor at a time. - Improve waiting and retrying when encountering access issues in `LocalFileSystem` and `DirectorySaveDataFileSystem`. - More `IFileSystemProxy` methods should work now. - Probably a bunch more stuff. On the Ryujinx side: - Forward most `IFileSystemProxy` methods to LibHac. - Register programs and program index map info when launching an application. - Remove hacks and workarounds for missing LibHac functionality. - Recreate missing save data extra data found on emulator startup. - Create system save data that wasn't indexed correctly on an older LibHac version. `FsSrv` now enforces access control for each process. When a process tries to open a save data file system, FS reads the save's extra data to determine who the save owner is and if the caller has permission to open the save data. Previously-created save data did not have extra data created when the save was created. With access control checks in place, this means that processes with no permissions (most games) wouldn't be able to access their own save data. The extra data can be partially created from data in the save data indexer, which should be enough for access control purposes.
2021-07-11Separate GPU engines (part 2/2) (#2440)gdkchan
* 3D engine now uses DeviceState too, plus new state modification tracking * Remove old methods code * Remove GpuState and friends * Optimize DeviceState, force inline some functions * This change was not supposed to go in * Proper channel initialization * Optimize state read/write methods even more * Fix debug build * Do not dirty state if the write is redundant * The YControl register should dirty either the viewport or front face state too, to update the host origin * Avoid redundant vertex buffer updates * Move state and get rid of the Ryujinx.Graphics.Gpu.State namespace * Comments and nits * Fix rebase * PR feedback * Move changed = false to improve codegen * PR feedback * Carry RyuJIT a bit more
2021-07-11Fix virtual memory allocation being out of range (#2464)gdkchan
2021-07-10am: Implement CreateApplicationAndRequestToStart (#2448)Ac_K
This PR implement `CreateApplicationAndRequestToStart` call, result code is checked by RE. Now we can restart a guest program by itself. This is needed by SSBU when you changes the game language. NOTE: This currently don't works using OpenAL backend due to another issue. Closes #2108
2021-07-06nifm: Fixes IsDynamicDnsEnabled not supported (#2443)Ac_K
For a strange reason `IPInterfaceProperties.IsDynamicDnsEnabled` returns a `PlatformNotSupported` exception in Linux. This PR fixes this issue with a `try/catch` and set the value to false. Closes #2415.
2021-07-06aoc: Fixes some inconsistencies (#2434)Ac_K
* aoc: Fixes some inconsistencies This PR fixes an wrong returned value (introduced in #2414) which cause some DLC not recognized in some games like Super Robot War T. Additionnally to that, I've removed the EventHandle check too, because it could cause some issues, but sadly it doesn't do the job so I reverted the changes. It should fix Diablo III: Eternal Collection. * Fix loop * Revert TitleLanguage change * write only available ids
2021-07-06Implement 12.0.0 hwopus functions (#2410)Billy Laws
Based off of my RE of 12.0.2 audio services, the newly added parameter can be safely ignored due to ryu not using fixed-size I/O buffers.
2021-06-29aoc: Fix wrong check (#2427)Ac_K
This PR fixes a wrong check added in #2414 which made Pokémon crash.
2021-06-29Fix disposing of IPC sessions server at emulation stop (#2334)Mary
2021-06-29Initial support for separate GPU address spaces (#2394)gdkchan
* Make GPU memory manager a member of GPU channel * Move physical memory instance to the memory manager, and the caches to the physical memory * PR feedback
2021-06-29aoc/am: Cleanup aoc service and stub am calls (#2414)Ac_K
* aoc/am: Cleanup aoc service and stub am calls This PR implement aoc call `GetAddOnContentListChangedEventWithProcessId` (Closes #2408) and `CreateContentsServiceManager`. Additionnally, a big cleanup (checked by RE on latest firmware) is made on the whole service. I've added `CountAddOnContent`, `ListAddOnContent` and `GetAddonContentBaseId` for games which require version `1.0.0-6.2.0` too. Am service call `ReportUserIsActive` is stubbed (checked by RE, closes #2413). Since some logic in the service (aoc) which handle the DLCs has been changed, it could be nice to have some testing to be sure there is no regression. * Remove wrong check * Addresses gdkchan feedback * Fix GetAddOnContentLostErrorCode * fix null pid in services * Add missing comment * remove leftover comment
2021-06-28no name: Mii Editor applet support (#2419)Ac_K
* no name: Mii Editor applet support * addresses gdkchan feedback * Fix comment * Bypass MountCounter of MiiDatabaseManager * Fix GetSettingsPlatformRegion * Disable Applet Menu for unsupported firmwares
2021-06-25caps: Stubs GetAlbumFileList0AafeAruidDeprecated and ↵Ac_K
GetAlbumFileList3AaeAruid (#2403) This PR stubs caps service call `GetAlbumFileList0AafeAruidDeprecated` and `GetAlbumFileList3AaeAruid` (Closes #2035, Closes #2401), both are checked by RE. This avoid using "ignore missing services" when you want to play World of Light in Super Smash Bros Ultimate.