switch模拟器吧 关注:14,555贴子:10,370
  • 5回复贴,共1

Ryujinx2020年11.12月进度报告

只看楼主收藏回复

2021 is finally here, and we spent last year's final months on a compatibility expansion and bug-fixing spree. But before we take a look at all the improvements that finished out the year, we want to take a moment to celebrate and say thank you to everyone who helped us reach our first Patreon goal—Amiibo emulation support—so quickly; we'll be working hard to implement this feature into the emulator ASAP, so stay tuned! Separately, with today's emulator update we have delivered on our promise to list the names of those in the $10 & $20 monthly Patreon tiers in the Help > About section of the emulator; thank you for your support! We've added a couple of new Patreon goals and lowered the threshold for our Vulkan goal. These tasks are already on our to-do list, however meeting the below Patreon goals gives us the resources to immediately tackle each respective feature.
(GOAL MET) - Amiibo Emulation
In-progress, ETA 3-4 weeks:
Allows emulated scans of a selected Amiibo and subsequently unlock exclusive content in games which support this function.
$1000/month (almost there!) - User Profile Support
ETA once goal is reached: ~1 month:
This will allow the creation of multiple user profiles, the option of using a custom name instead of the current default name "Player", and the ability to use a custom profile picture instead of the current hardcoded (and very old) Ryujinx logo. We will also attempt to load the official profile pictures from the installed firmware, and provide them as an additional option.
$1250/month - Vulkan GPU Backend
ETA once goal is reached: ~6-8 weeks:
This one is a biggie. Vulkan will significantly improve performance for and reduce the amount of graphical glitches on AMD GPUs and intel iGPUs. Moreover, SPIR-V (Vulkan shader language) is faster than GLSL (OpenGL shader language) so, even without a disk shader cache, there would be significantly less stutter on first run than on native OpenGL.
$1500/month - ARB Shaders
ETA once goal is reached: ~3-4 weeks:
ARB shaders will further reduce stuttering on first-run by improving the shader compilation speed on NVIDIA GPUs using the OpenGL API.
And now the progress report!GPU improvements:
Buffer to texture copies size fix
A bug on buffer to texture copies caused some Unreal Engine 4 games to crash. This bug was causing the emulator to copy too much data which in turn caused memory corruption, as unrelated data was being overwritten in memory. Fixing this allowed a few Unreal Engine 4 games to boot further, with the tested titles now reaching menus, but they unfortunately still crashed when attempting to start a new game.


IP属地:湖北1楼2021-01-09 16:22回复
    One such game was Remothered: Broken Porcelain, which renders quite well as we can see on the above screenshot. The Bravely Default II demo also had improvements, but neither of these are playable just yet.
    Fixed on #1670 by gdkchan.
    Make sure to enable rasterizer discard before clear
    The switch GPU supports a feature called rasterizer discard, where the GPU simply discards the output produced by triangle rasterization. This also affects clears, which means that attempting to clear a framebuffer with this feature enabled wouldn't actually do anything. Xenoblade uses the feature to disable draws from rendering into framebuffers, while still allowing the shaders to run. It is not supposed to be enabled for clears but, due to a bug on the emulator, the rasterizer discard was not being disabled.
    This caused a lot of "ghost" shadows to be rendered on Xenoblade as they were not being properly cleared. Fixing the issue was simple, fortunately, and allowed the game to now render shadows properly:
    Fixed on #1680 by riperiperi.
    Shader cache
    This feature is the most highly requested item we’ve ever implemented. A disk shader cache allows the shaders used by the game to be saved to the disk. On subsequent runs, the emulator does not need to compile them while the game is running. Instead, all shaders are pre-compiled at startup. This eliminates stutters caused by shader compilation, as long that specific part of the game was already played before.
    We have a separate blog post covering the feature, you can check it out here if you haven't already.
    Implemented on #1701 by Thog.
    Force early depth test implementation
    Early depth test is an optimization that the GPU can do that performs depth testing before the pixel shaders runs. This saves the GPU from having to do potentially expensive pixel shader computations if the pixel is not visible in the scene being rendered. This optimization is normally not enabled if doing so would cause a change in the output produced by the pixel shader, however, applications may still force it to be enabled in those cases. Xenoblade is the only game known to do this.
    Implementing the feature fixes interior volumes being incorrectly rendered, as can be seen below:
    Implemented on #1755 by riperiperi. Originally discovered by Rodrigo.
    CPU improvements:
    Half float optimizations
    Half float is a 16-bit floating point format. It has less precision than the more common 32-bit float format but also uses half of the memory, so it may be useful in some cases where higher precision is not a must. The Arm CPU that the Switch has only supports doing a few operations with this float format, which are mainly conversions to and from half float values. The implementation of this instruction on the emulator was optimized by using dedicated x64 instructions to do the conversion, which means that games making use of the functionality will now be a little bit faster.
    Implemented on #1650 by LDj3SNuD.
    Floating point accuracy improvements
    A bug in one of the floating point instructions caused Luigi’s Mansion 3 to get stuck in a specific part of the game. The bug caused the elevator to keep moving forever when trying to go to a specific floor.


    IP属地:湖北2楼2021-01-09 16:26
    回复
      2025-08-18 22:36:00
      广告
      不感兴趣
      开通SVIP免广告
      The bug was fixed by properly supporting the flush-to-zero mode on the responsible instructions, and the game can now be progressed through normally.
      Fixed on #1630 by LDj3SNuD.
      New CPU intructions implemented: VFMA, VFNMA, VFNMS and VRINTX
      Some missing 32-bit CPU instructions prevented many games from booting. Those instructions are responsible for doing a fused multiply and accumulate operation (FMA), and also integer rounding. Implementing them made Spirit Hunter: NG, Fairy Fencer F: Advent Dark Force, Cabela's: The Hunt - Championship Edition, STURMWIND EX, Megadimension Neptunia VII, Baldur's Gate and Baldur's Gate II: Enhanced Editions, Planescape: Torment and Icewind Dale: Enhanced Editions, Little Inferno, Prinny Can I really Be the Hero, Prinny 2 Dawn of Operation Panties Dood, Human Resource Machine, 7 Billion Humans, TY the Tasmanian Tiger and many more booth further, many of which are now playable!
      Implemented on #1758, #1783, #1762 and #1776 by Sharmander.
      PPTC improvements
      PPTC is a feature that helps reducing load times by saving JIT generated code on disk. The feature was recently improved by fixing a bug that would prevent the memory used for JIT compilation to not be reclaimed when the feature was active. This reduces memory usage and should fix some out of memory errors on system with lower amounts of RAM.
      Other improvements also includes better logging and general code refactoring.
      Fixed on #1712 and #1814 by LDj3SNuD.
      HLE improvements:
      VR support
      A few Nintendo Switch games support Virtual Reality with the use of the Nintendo Labo kit. The feature was not working on the emulator due to missing OS service functions. Implementing the required functions allowed the feature to be enabled on the games supporting it. One example of such a game is The Legend of Zelda: Breath of the Wild, as we can see below:
      A few other games support VR, such as Super Mario Odyssey and Captain Toad: Treasure Tracker. There are also a few games that only work in VR mode, such as Spice and Wolf VR. The feature can't be fully enjoyed yet due to the lack of support for the motion sensor on the Nintendo Switch (the one on JoyCons is already supported, but the SixAxis sensor on the unit itself isn't).
      Implemented on #1688 by Ac_K.
      Audout service fixes
      The audio output service (called simply "audout") is used by some games to output a raw audio stream on the Switch. A few missing functions prevented some games from progressing past menus. Namely, the "GetAudioOutBufferCount", "GetAudioOutPlayedSampleCount" and "FlushAudioOutBuffers" functions. Implementing them made games such as Atelier Shallie: Alchemists of the Dusk Sea DX and Devil May Cry 2 playable.
      Implemented on #1725 by Ac_K.
      Audio renderer regression fixes
      Earlier this year, we announced Amadeus, a large project that rewrote the entire audio renderer implementation on the emulator. While the old implementation was based mostly on guess work and on the client side implementation (basically, on what games do when communicating with the OS), the new one was based on proper reverse engineering of the service.
      The new implementation was complete and fairly accurate, but complete does not necessarily mean bug free. While it was tested extensively before release, we can't possibly test very game so a few bugs managed to go unnoticed. Two particular bugs caused an out of range access on arrays within the audio renderer, and caused Resident Evil 6 and Shovel Knight: Treasure Trove to crash at boot. Both issues are now fixed, and the games are playable once again.
      Resident Evil also has significantly better audio now thanks to Amadeus!
      Fixed on #1739 and #1742 by Thog.
      Save data size fix
      A bug on the function that games uses to get the maximum size of save data was preventing some games from working. The size was not being properly written to the output. Fixing this issue allowed The Language of Love to boot.
      This game is now playable!
      Fixed on #1748 by Ac_K.
      IPC improvements
      On the Switch OS, processes can communicate which each other using inter-process communication. This is the way that the game uses to send requests to services, and how services send responses to those requests back to the game. This was not accurately implemented on the emulator; the services were just reading the requests from the game memory directly and writing the responses there. There was no concept of separate process or address space per service. Those changes enable each service to have their own guest processes (they are not real host processes, but they have their own processes on the HLE OS). In addition to that, they also now use the correct system calls to receive and reply to requests sent by the game.
      This change does not have any immediately noticeable improvements for end users, but it does benefit homebrew developers creating custom services; they can now use the emulator to test their code. In the future, this will also allow emulation of the Nintendo Switch OS services.
      Implemented on #1458 by gdkchan.
      Scheduler context switch code rewrite
      Context switching is the process of transferring control from one thread to another. The old code had quite a few bugs that caused issues on some games. The rewrite fixed a few intermittent crashes and softlocks caused by bugs on the old implementation that would allow errant operations such as the same thread running on two different guest CPU cores, and race conditions. One of the games that could crash due to this was Bayonetta 2, which is now much more stable.


      IP属地:湖北3楼2021-01-09 16:31
      回复
        These improvements were made using Mesosphere, a fully open-source implementation of the Nintendo Switch kernel which was made through reverse engineering of the Nintendo kernel and attempts to match as closely as possible, as a reference.
        Fixed on #1786 by gdkchan.
        GPU memory allocation speed improvements
        The process of allocation GPU memory on the emulator implementation of the NVIDIA driver used to be very slow, due to its use of linear search to find free memory regions. With an optimization that changed it to use a binary search tree instead, the allocation process is much faster. In practice, this decreases the loading time in Fire Emblem Three Houses (to reach the title screen) by about 20 seconds.
        Other games might benefit from this as well, but most games don't have a visible improvement. The amount of improvement is entirely dependent on the way the game manages GPU memory.
        Implemented on #1722 by Sharmander.
        NGCT service functions
        The NGCT (No Good Content for Terra, according to switchbrew) is responsible for filtering "bad" words, and is used by games released in China when such filtering is necessary. One of the games that makes use of this is Horace, which is now playable thanks to the implementation of the service.
        Implemented on #1756 by Ac_K.
        Loader improvements
        A bug in the loader prevented games using a very large BSS size from being loaded into memory. The bug was caused by the use of the wrong integer type for those sizes. The emulator was using a signed type which means that the size could be negative (something that is not valid). It was fixed by changing to an unsigned type which means that the size can't be negative, and the correct size is now used.
        This fixes failure to load on Hatsune Miku: Project DIVA Mega 39's/Mega Mix (only the US version was affected; the Japanese version was already working before!), Death Mark, Darkest Dungeon, CHAOS CODE - NEW SIGN OF CATASTROPHE, Air Missions: HIND, Doukoku Soushite..., and more.
        Most of these games are now playable.
        Reported on #1792 by EliEron.
        Fixed on #1802 by gdkchan.
        It's time to wake up!
        Some games, like The World Ends with You, requires waking the Switch up from sleep mode to progress past certain parts. We added a new option on the UI to simulate this, along with the required HLE OS support for the functionality. This allows the game to be progressed through now with a single click.
        We might also add a key binding for that in the future, so that users don't need to exit full screen mode to perform the required action.
        Implemented on #1750 by Ac_K.
        Frame pacing improvements
        Uneven frame times can cause a significant loss in the perceived frame rate of a game. Even if the game is running at, say, 60 fps, it can feel much slower than that if the frames are not presented at the correct time. On top of that, incorrect frame pacing can cause the game to visibly stutter.
        This was fixed by using a more precise wait mechanism for frame presentation and VSync signaling. Instead of using the host OS waits (which only has millisecond precision on windows, in the best case), it now uses a mixed method that spin waits for the remaining fraction of the time.
        Another problem was that the GPU command processing was not being interrupted for frame presentation (which happens on the same thread, due to OpenGL not being multithreading friendly). This further contributed to the frame pacing issues (two frames could be presented at once) and would also cause the GPU to be idle for no reason, since at some point the game will need to wait until the frame is presented to reuse the framebuffer, and will not be able to submit more commands until that is done. This issue was fixed by interrupting GPU command processing for frame presentation, if a frame is available.
        These changes brought significant improvements to both Xenoblade games available on the Switch, but those are not the only games that benefit from it! Nearly all games feel smoother now.
        Before:
        【图不让发】
        After:
        【图不让发】
        Not only the frame times are much more stable now, the average frame rate is also higher on this title.
        Fixed on #1741 by riperiperi.
        GUI improvements:
        Toggle docked/handheld mode with a key binding
        Switch games usually render at a higher resolution, and with more quality in docked mode. The reason for that is simple: in docked mode the device is not running on battery power, which allow slightly higher clock speeds to be used by the CPU/GPU. This increases their processing speed and makes increases in resolution possible without too much of a compromise on the frame rate.
        This change allows the mode to be changed by simply pressing a hotkey without the need for navigating the emulator’s options menu.
        Implemented on #1685 by SeraUQ.
        Toggle docked/handheld mode by clicking on the status bar
        We also had a related change allowing the mode to be changed by clicking on the status bar to toggle docked/handheld modes. The currently selected mode is shown.
        Implemented on #1726 by Ac_K.
        U l t r a W i d e
        We received some user requests to support ultra-wide resolutions in the emulator. This can be used together with mods that changes the game aspect ratio to allow them to fill ultra wide screens. A new setting was added on the UI that allows the aspect ratio to be extended to 21:9 and beyond. It also now supports a 4:3 for those that prefer a more retro look. The default aspect ratio is 16:9, which is the current standard and what the Switch has. It's also possible to also stretch the image now. Before, it would automatically fill the window/screen but insert borders to preserve the aspect ratio. With the new stretch option, it fills all the space without trying to preserve the aspect ratio.
        We highly recommend keeping it on the default 16:9 ratio, as anything else will distort the image without mods. But the option is now there for those that want it!
        Implemented on #1777 by Ac_K.
        Other:
        OpenAL is now distributed with the emulator binaries
        A small nuisance for first time users was the requirement to install OpenAL. It is required for audio to work on certain games with the emulator. The emulator also has a SoundIO audio backend (whose library is shipped with the emulator), but this does not work well with all games. Now OpenAL is also shipped with the emulator, so users don't need to install it on their system! On top of that, we are now using a newer version of the OpenAL library, which further improves audio output in some games when this backend is used.
        Implemented on #1847 by Thog.
        Closing words:
        We hope you have enjoyed all the progress we made during the year, and we plan to tackle many more improvements in 2021. There's still a very long way to go! We recently restructured our Patreon tiers & benefits; we published a post with more details about those changes; be sure to check it out here if you haven't already!
        In the last progress report we also mentioned some sub-projects we have been working on. One of them is Arm64 support. For those not aware, Arm is a CPU architecture that powers most mobile devices. Apple also recently announced a move from x86 to Arm CPUs, and the recent release of the Apple M1 emphasizes the importance of supporting Arm in the future in order to make the emulator available on new platforms.
        The work has already begun, and we have made some progress using the Raspberry Pi 4 board as a test platform. Below you can see screenshots of a few games running on the device.
        There's still a lot of work to be done, but it's exciting to see these first games booting on a new platform! This should eventually allow Android devices and new Apple Arm devices running MacOS to be supported in the future.
        Thanks for everyone that has supported us so far be it via Patreon donations, code contributions, testing games in the emulator, or simply being an active member of our community. You’ve helped make this emulator what is it today!
        We now have an active Patreon campaign with specific goals (one of which was just met...more on that soon!) and restructured subscriber benefits/tiers , so head on overif you want to help push Ryujinx forward!


        IP属地:湖北4楼2021-01-09 16:36
        回复
          2021年终于到来了,我们花了去年最后几个月的时间进行兼容性扩展和错误修复。但是,在我们看完今年的所有改进之前,我们想花点时间庆祝一下,并感谢所有帮助我们达到目标的人。我们的第一个守门-MIIBO仿真支持-这么快,我们将努力工作,尽快将这个特性实现到模拟器中,所以请继续关注!另外,随着今天的仿真器更新,我们承诺在帮助>关于模拟器的部分列出$10&20美元每月Patreon层的名称;谢谢您的支持!我们增加了几个新的帕特伦进球,降低了我们的乌尔坎进球的门槛。这些任务已经列在我们的待办事项清单上了,但是实现下面的Patreon目标将为我们提供资源来立即处理每个相关的特性。
          (目标达成)-阿米波仿真
          正在进行中,埃塔3-4周:
          允许模拟扫描选定的Amiibo,并随后解锁游戏中的独家内容,支持这一功能。
          每月$1000(快到了!)用户配置文件支持
          ETA一旦达到目标:~1个月:
          这将允许创建多个用户配置文件、使用自定义名称而不是当前默认名称“Player”的选项,以及使用自定义配置文件图片代替当前硬编码(且非常旧)的Ryujinx徽标的能力。我们还将尝试从安装的固件加载官方配置文件图片,并提供它们作为附加选项。
          每月1250元-Vulkan GPU后端
          ETA一旦达到目标:~6-8周:
          这是个大人物。Vulkan将显著改善AMD GPU和英特尔iGPU的性能,并减少图形故障的数量。此外,SPIR-V(Vulkan Shader Language)比GLSL(OpenGL着色器语言)更快,因此即使没有磁盘着色器缓存,第一次运行时的结巴也要比本地OpenGL少得多。
          每月$1500-ARB阴影
          ETA一旦达到目标:~3-4周:
          ARB着色器将通过提高NVIDIA GPU上使用OpenGL API的着色器编译速度来进一步减少第一次运行时的口吃。
          现在是进度报告!
          GPU改进:
          缓冲区到纹理副本大小修复
          一个错误的缓冲区纹理副本导致一些虚幻引擎4游戏崩溃。此错误导致仿真器复制过多的数据,从而导致内存损坏,因为内存中正在覆盖无关的数据。修复这使得一些虚幻引擎4游戏可以进一步启动,测试的标题现在到达菜单,但不幸的是,他们仍然崩溃时,试图开始一个新的游戏。
          其中一个游戏是“记忆”:破碎的瓷器,就像我们在上面的截图中所看到的那样,它呈现得相当好。勇敢的默认II演示也有改进,但这些都还不能玩。
          固定在#1670由gdkchan写的。
          请确保在清除前启用栅格丢弃。
          开关GPU支持一个名为“栅格丢弃”的特性,其中GPU简单地丢弃了三角形栅格化产生的输出。这也会影响清除,这意味着尝试清除启用此功能的框架缓冲区实际上不会做任何事情。Xenoblade使用该功能禁用渲染到帧缓冲区的绘制,同时仍然允许着色器运行。不应该启用它进行清除,但是,由于模拟器上有一个错误,光栅程序丢弃没有被禁用。
          这导致大量的“幽灵”阴影被渲染在Xenoblade上,因为它们没有被正确清除。幸运的是,解决这个问题很简单,并且允许游戏现在正确地渲染阴影:
          固定在#1680由利伯里。
          着色缓存
          这个特性是我们实现过的最需要的项目。磁盘着色器缓存允许游戏使用的着色器保存到磁盘。在后续运行时,模拟器不需要在游戏运行时编译它们。相反,所有的着色器都是在启动时预编译的。这消除了口吃造成的着色编译,只要游戏的特定部分已经玩过了。
          我们有一个单独的博客文章覆盖这个功能,您可以查看它。这里如果你还没有。
          实施于#1701通过苏格。
          力早期深度测试实现
          早期深度测试是GPU可以执行的优化,在像素着色器运行之前执行深度测试。这可以避免GPU在渲染的场景中看不到像素时进行潜在的代价昂贵的像素着色器计算。如果这样做会导致像素着色器产生的输出发生更改,则通常不会启用此优化,但是,在这些情况下,应用程序可能仍然会强制启用该优化。Xenoblade是唯一知道这样做的游戏。
          实现该功能修复了内部卷呈现错误,如下所示:
          实施于#1755由利伯里。最初是罗德里戈发现的。
          CPU改进:
          半浮点优化
          半浮点格式是一种16位浮点格式.它的精度低于普通的32位浮点数格式,但也占用了内存的一半,因此在一些不需要高精度的情况下,它可能是有用的。交换机拥有的ARM CPU只支持使用这种浮点格式执行几个操作,这些操作主要是对半浮动值的转换。该指令在模拟器上的实现是通过使用专用的x64指令进行转换来优化的,这意味着使用该功能的游戏现在会更快一些。
          实施于#1650由LDj3SNuD。
          浮点精度改进
          其中一个浮点指令中的一个bug导致Luigi的官邸3被卡在游戏的某个特定部分。当试图进入特定的楼层时,窃听器导致电梯永远不停地移动。
          错误是通过正确地支持负责任的指令上的刷新到零模式来修复的,游戏现在可以正常进行。
          固定在#1630由LDj3SNuD。
          实现了新的CPU导入:VFMA、VFNMA、VFNMS和VRINTX
          一些丢失的32位CPU指令阻止了许多游戏的启动。这些指令负责进行融合乘法和累加运算(FMA),以及整数舍入。实现他们的精神猎人:吴,仙女Fencer F:降临黑暗力量,卡贝拉的:狩猎-冠军版,STURMWIND前,巨型海王星七,巴尔杜尔的门和巴尔杜尔的门II:增强版,行星逃脱:折磨和冰封戴尔:增强版,小地狱,王子我真的可以成为英雄,打印2黎明的行动内裤Dood,人力资源机器,70亿人,塔斯马尼亚虎和更多的摊位,其中许多现在是可玩的!
          实施于#1758, #1783, #1762和#1776沙曼德写的。
          PPTC改进
          PPTC是一项功能,通过在磁盘上保存JIT生成的代码来帮助减少负载时间。该特性最近得到了改进,修复了一个bug,该bug将防止用于JIT编译的内存在该功能处于活动状态时不被回收。这减少了内存的使用,并且应该在内存数量较低的系统上修复一些内存不足的错误。
          其他改进还包括更好的日志记录和通用代码重构。
          固定在#1712和#1814由LDj3SNuD。
          房屋署的改善:
          VR支持
          一些任天堂切换游戏支持虚拟现实与使用任天堂Labo工具包。由于缺少OS服务功能,该功能无法在模拟器上工作。实现所需的功能允许在支持该功能的游戏中启用该功能。这种游戏的一个例子是“塞尔达的传说:野性的呼吸”,如下所示:
          其他一些游戏支持虚拟现实,比如超级马里奥·奥德赛和蟾蜍队长:寻宝者。也有一些游戏,只有在虚拟现实模式,如Spice和沃尔夫VR。由于缺乏对任天堂开关上的运动传感器的支持(JoyCons上的移动传感器已经被支持,但是单元上的六轴传感器本身不支持),这个功能还不能完全享受。
          实施于#1688由AC K.
          金dOut服务修复
          有些游戏使用音频输出服务(简称“audout”)在交换机上输出原始音频流。一些功能的缺失阻止了一些游戏通过菜单。即“GetAudioOutBufferCount”、“GetAudioOutPlayedSampleCount”和“FlushAudioOutBuffers”功能。实现它们使游戏,如Atelier Shallie:炼金术士的杜斯克海DX和魔鬼五月哭2可玩。
          实施于#1725由AC K.
          音频渲染器回归修复
          今年早些时候,我们宣布了Amadeus,一个在模拟器上重写整个音频呈现器实现的大型项目。虽然旧的实现主要基于猜测工作和客户端实现(基本上是基于游戏在与OS通信时所做的),但新的实现是基于服务的适当的反向工程。
          新的实现是完整和相当准确的,但完成并不一定意味着没有bug。虽然在发布前对它进行了广泛的测试,但是我们不可能很好地测试游戏,所以有一些bug没有被注意到。两个特定的错误导致音频渲染器中阵列的越界访问,并导致常驻邪恶6和铲骑士:宝藏宝藏在启动时崩溃。这两个问题现在都解决了,游戏又一次可以玩了。
          居民邪恶也有显着的更好的音频现在感谢阿马迪乌斯!
          固定在#1739和#1742通过苏格。
          保存数据大小修正
          游戏用来获取保存数据的最大大小的函数上的一个bug阻止了一些游戏的工作。没有正确地将大小写入输出。解决这个问题可以启动“爱的语言”。
          这个游戏现在可以玩了!


          IP属地:湖北5楼2021-01-09 16:50
          回复
            固定在#1748由AC K.
            IPC改进
            在交换机操作系统上,进程可以通过进程间通信相互通信.这是游戏向服务发送请求的方式,以及服务如何将响应发送回游戏。这没有在模拟器上准确地实现;服务只是直接读取游戏内存中的请求并在其中写入响应。每个服务没有单独的进程或地址空间的概念。这些更改使每个服务都有自己的来宾进程(它们不是真正的主机进程,但它们在HLE OS上有自己的进程)。除此之外,他们现在还使用正确的系统调用来接收和回复游戏发送的请求。
            对于最终用户来说,这一更改没有立即明显的改进,但它确实有利于创建自定义服务的自制开发人员;他们现在可以使用模拟器来测试他们的代码。在未来,这也将允许模仿任天堂切换操作系统服务。
            实施于#1458由gdkchan写的。
            调度器上下文切换代码重写
            上下文切换是将控制从一个线程转移到另一个线程的过程。旧代码中有相当多的bug,导致了一些游戏的问题。重写修复了一些由旧实现上的错误引起的间歇性崩溃和软锁,这些错误操作允许在两个不同的客户CPU核上运行相同的线程和竞争条件。其中一个游戏可能会崩溃,因为这是巴约内塔2,这是现在更加稳定。
            这些改进使用的是Messphere,一种完全开源的任天堂交换内核的实现,它是通过对任天堂内核的逆向工程来实现的,并试图尽可能地匹配,作为参考。
            固定在#1786由gdkchan写的。
            GPU内存分配速度的改进
            在NVIDIA驱动程序的模拟器实现上分配GPU内存的过程非常缓慢,因为它使用线性搜索来查找空闲内存区域。通过优化将其改为使用二进制搜索树,分配过程要快得多。在实践中,这减少了加载时间在消防标志三室(达到标题屏幕)约20秒。
            其他游戏也可能从中受益,但大多数游戏并没有明显的进步。改进的数量完全取决于游戏管理GPU内存的方式。
            实施于#1722沙曼德写的。
            NGCT业务功能
            NGCT负责过滤“坏”字,在中国发布的游戏中,这种过滤是必要的。利用这一点的游戏之一是Horace,由于该服务的实现,该游戏现在可以玩了。
            实施于#1756由AC K.
            装载机改进
            加载程序中的一个bug防止使用非常大的BSS大小的游戏被加载到内存中。错误是由于对这些大小使用了错误的整数类型造成的。模拟器使用的是有符号类型,这意味着大小可能为负值(一些无效的东西)。它是通过更改为无符号类型来修正的,这意味着大小不能是负值,现在使用的是正确的大小。
            这解决了在Hatsune Miku上加载失败的问题:项目Dva Mega 39 s/Mega Mix(只有美国版本受到影响;日本版本之前已经在工作!)、死亡标记、最黑暗的地下城、混沌代码--灾难的新迹象、空中任务:Hard、Doukoku Soushite……等等。
            这些游戏现在大部分都可以玩了。
            报告#1792作者:Eliron.
            固定在#1802由gdkchan写的。
            是时候醒醒了!
            有些游戏,如“世界以你结束”,需要唤醒睡眠模式的转换,以超越某些部分。我们在UI上添加了一个新的选项来模拟这一点,以及对该功能所需的HLEOS支持。这使得游戏可以通过一次点击就可以完成。
            我们还可以在将来添加一个键绑定,这样用户就不需要退出全屏模式来执行所需的操作。
            实施于#1750由AC K.
            帧调速改进
            不均匀的帧时间会在游戏的感知帧率中造成显著的损失。即使游戏运行在,比如说60英尺,如果框架没有在正确的时间出现,它会感觉比那慢得多。更重要的是,不正确的帧步调会导致游戏明显口吃。
            这是通过使用更精确的帧表示和Vsync信令的等待机制来解决的。它现在没有使用主机操作系统等待(在最好的情况下,Windows上只有毫秒的精度),而是使用了一种混合方法,可以旋转等待剩余的一小部分时间。
            另一个问题是GPU命令处理不会因为帧表示而被中断(由于OpenGL不是多线程友好的,这发生在同一个线程上)。这进一步导致了帧间隔问题(可以同时显示两个帧),也会导致GPU无缘无故地处于空闲状态,因为在某个时候,游戏需要等到帧被提交才能重用框架缓冲区,并且在此之前不能提交更多的命令。这个问题是通过中断GPU命令处理来解决的,如果一个帧可用的话。
            这些变化给开关上可用的Xenoblade游戏带来了显著的改进,但这些并不是唯一受益于它的游戏!差一点全游戏现在感觉更流畅了。
            之前:
            之后:
            现在不仅帧时间更稳定了,平均帧率也更高了。
            固定在#1741由利伯里。
            Gui改进:
            切换键绑定的停靠/手持模式
            切换游戏通常以更高的分辨率呈现,并且在对接模式下具有更高的质量。原因很简单:在对接模式下,设备不使用电池电源,这允许CPU/GPU使用稍高的时钟速度。这增加了它们的处理速度,使分辨率的提高成为可能,而不会对帧速率造成太大的妥协。
            此更改允许更改模式,只需按一个热键,而不需要导航模拟器的“选项”菜单。
            实施于#1685作者:SeraUQ。
            单击状态栏切换停靠/手持模式
            我们还进行了相关的更改,允许通过单击状态栏切换停靠/手持模式来更改模式。显示当前选择的模式。
            实施于#1726由AC K.
            你不知道是怎么回事
            我们在模拟器中收到了一些支持超宽分辨率的用户请求.这可以与MODS一起使用,它可以改变游戏的纵横比,使它们能够填充超宽的屏幕。在UI上添加了一个新设置,允许将宽高比扩展到21:9及以后。它现在也支持4:3的那些更喜欢复古的外观。默认的高宽比是16:9,这是当前的标准和开关。现在也可以扩展图像。在此之前,它将自动填充窗口/屏幕,但插入边框以保留高宽比。使用新的拉伸选项,它填补了所有的空间,而不试图保持高宽比。
            我们强烈建议保持在默认的16:9的比例,因为其他任何东西都会扭曲图像没有MODS。但是对于那些想要它的人来说,现在已经有了选择!
            实施于#1777由AC K.
            其他:
            OpenAL现在与模拟器二进制文件一起分发。
            第一次用户遇到的一个小麻烦是安装OpenAL的要求。它是需要音频工作在某些游戏与仿真器。模拟器还有一个SoundIO音频后端(它的库随模拟器一起提供),但这并不适用于所有游戏。现在OpenAL也随模拟器一起提供了,所以用户不需要在他们的系统上安装它!最重要的是,我们现在使用的是OpenAL库的更新版本,当使用这个后端时,它进一步改善了某些游戏中的音频输出。
            实施于#1847通过苏格。
            结束语:
            我们希望你们享受我们在这一年中取得的所有进展,我们计划在2021年解决更多的改进问题。还有很长的路要走!我们最近对Patreon层和福利进行了重组;我们发布了一篇包含更多关于这些更改的详细信息的文章;一定要检查它。这里如果你还没有!
            在上一份进度报告中,我们还提到了一些我们一直在进行的子项目。其中之一是ARM 64的支持。对于那些不知道的人,ARM是一个CPU架构,为大多数移动设备提供动力。苹果最近还宣布从x86转向ARM CPU,最近发布的Apple M1强调了支持ARM的重要性,以使模拟器在新的平台上可用。
            这项工作已经开始,我们已经取得了一些进展,使用Raspberry PI 4板作为测试平台。下面你可以看到屏幕截图的几个游戏运行在设备上。
            还有许多工作要做,但看到这些第一批游戏启动在一个新的平台是令人兴奋的!这最终将允许Android设备和运行MacOS的新苹果ARM设备在未来得到支持。
            感谢到目前为止支持我们的每一个人,无论是通过Patreon捐赠、代码贡献、在模拟器中测试游戏,还是仅仅作为我们社区的活跃成员。你帮助制作了这个仿真器今天它是什么!
            我们现在有一个活跃分子帕特伦有具体目标的运动(其中一项刚刚实现.很快就会有更多的内容!)和重组订阅者福利/层,因此头朝上如果你想帮助Ryujinx前进!


            IP属地:湖北6楼2021-01-09 17:02
            回复