Run Nintendo Switch homebrew & games on your Android device!
Go to file
Billy Laws baefb0fe93 Implement the Host1x command FIFO together with barebones Host1x classes
The Host1x block of the TX1 supports 14 separate channels to which commands can be issued, these all run asynchronously so are emulated the same way as GPU channels with one FIFO emulation thread each. The command FIFO itself is very similar to the GPFIFO found in the GPU however there are some differences, mainly the introduction of classes (similar to engines) and the Mask opcode (which allows writing to a specific set of offsets much more efficiently).

There is an internal Host1x class which functions similar to the GPFIFO class in the GPU, handling general operations such as syncpoint waits, this is accessed via the simple method interface. Other channels such as NVDEC and VIC are behind the 'Tegra Host Interface' (THI) in HW, this abstracts out the classes internal details and provides a uniform method interface ontop of the Host1x method one. We emulate the THI as a templated wrapper for the underlying class.

Syncpoint increments in Host1x are different to GPU, the THI allows submitting increment requests that will be queued up and only be applied after a specific condition in the associated engine is met; however the option to for immediate increments is also available.
2021-11-10 21:35:36 +05:30
.github/workflows Upgrade AGP to 7.1.0-beta01 & NDK to 24.0.7856742 2021-10-31 15:50:15 +05:30
.idea Update NDK to 23.1.7779620 2021-10-26 10:46:36 +05:30
app Implement the Host1x command FIFO together with barebones Host1x classes 2021-11-10 21:35:36 +05:30
gradle/wrapper Android 12 Support + Update Libraries + Include Khronos Validation Layer 2021-10-26 10:46:36 +05:30
.gitignore Introduce ThreadLocal Class + Fix Several GPU Bugs 2021-10-16 12:13:30 +01:00
.gitmodules Use proper names rather than paths for submodules 2021-11-01 00:28:11 +05:30
build.gradle Upgrade AGP to 7.1.0-beta02 2021-11-09 21:02:59 +05:30
CONTRIBUTING.md Replace skyline-emu/VkHpp with KhronosGroup/Vulkan-Hpp 2021-06-17 20:30:22 +05:30
gradle.properties Android 12 Support + Update Libraries + Include Khronos Validation Layer 2021-10-26 10:46:36 +05:30
gradlew Redesign UI 2021-06-17 20:30:22 +05:30
gradlew.bat add files, cannot figure out why native lib is broken 2019-06-28 20:35:14 -04:00
LICENSE.md Move to MPL-2.0 2020-04-23 22:26:27 +05:30
README.md Revamp README 2021-03-23 02:40:02 +05:30
settings.gradle add files, cannot figure out why native lib is broken 2019-06-28 20:35:14 -04:00



Skyline is an experimental emulator that runs on ARMv8 Android™ devices and emulates the functionality of a Nintendo Switch™ system, licensed under Mozilla Public License 2.0


Contact

You can contact the core developers of Skyline at our Discord. If you have any questions, feel free to ask. It's also a good place to just keep up with the emulator, as most talk regarding development goes on over there.


Special Thanks

A few noteworthy teams/projects who've helped us along the way are:

  • Ryujinx: We've used Ryujinx for reference throughout the project, the amount of accuracy of their HLE kernel implementation is what makes them such an amazing reference. The team behind the project has been really helpful with any queries we've had. It should be noted that Skyline is not based on Ryujinx.

  • Switchbrew: We've extensively used Switchbrew whether that be their wiki with it's colossal amount of information on the Switch that has saved us countless hours of time or libnx which was crucial to initial development of the emulator to ensure that our HLE kernel and sysmodule implementations were accurate.

  • Atmosphère: We've used libmesosphere as another reference for our HLE kernel, it's faithfulness to the HOS kernel helps us a lot. This makes it invaluably important for us as a tool for writing code that can accurately emulate HOS behavior without missing any crucial parts.


Disclaimer

  • Nintendo Switch is a trademark of Nintendo Co., Ltd
  • Android is a trademark of Google LLC