Switch模拟器Ryujinx进步报告2022-1月
宝可梦传说:阿尔宙斯
新的一年,新的一个月,新的进步! 我们想让每个人都像我们一样享受新的一年。 2022年,有了新的主要系列精灵宝可梦。 妖精宝可梦传说:阿尔宙斯已经是冒险了。 除了这个大版本,我们正在努力进行本月可以完成的大量GPU更新和错误修复。
Patreon目标:
amiiboemulation-2021年3月集成到主版本。
兼容性几乎是完美的,但Amiibo已经过改进,可以跟踪相关的Github问题
自定义用户配置文件已于2021年4月集成到主版本中。
Vulkan GPU后端-仍在进行中,并提供了公开测试版本。
ARB着色器-目标将于2021年4月实现。 我和Vulkan一起工作。 在这个更新能以我们满意的状态交货之前,请稍等。
通过使用OpenGL API提高 NVIDIA GPU中着色器的编译速度,ARB着色器可以进一步减少首次运行时的纸箱。
2000美元/月-纹理包/更换功能-徘徊在这个级别!
这样可以替换游戏中的图形纹理,扩展自定义纹理,图形备用控制器按钮等。
目标维持后,预计到达时间:3-4周
200美元/月-全职开发者-快到了!
这笔每月捐款将允许该项目的创始人gdkchan全职开发Ryujinx。
5000美元/月-添加全职开发人员-我还不满意
这笔每月捐款将允许额外的Ryujinx团队开发人员全职从事这个项目。
所以不能迟到。 进入本月的进展吧。
Vulkan的进展:
不能晚了。 让我们进入更有趣的Vulkan后端更改、修复和添加。
最终幻想VII相当于AMD卡……有独特的视觉障碍:
最终幻想
如果你有一段时间没做过FF7了,那并不意味着它看起来像那个样子。 幸运的是,这包含在我们的修复名单中。 这还是个小问题,但更好:
最终幻想
雷顿教授分享了类似的问题:
雷顿教授
下载主抽取请求时,为了便于测试,默认情况下直接禁用了spir-v(Vulkan着色语言)编译,但这并不意味着在本报告中被遗忘了,gdkchan是着色器的回退
SPIR-V着色器的。 编译速度比当前在OpenGL中使用的GLSL着色器快得多,并检查以下比较(没有缓存) :
和OpenGL GLSL。 Vulkan SPIR-V :
正在加载视频.
很酷吧? 有趣的是,OpenGL视频使用完全多线程编译,而Vulkan只使用单线程编译。 这就是SPIR-V的强大之处,在下一次报告中我们可能会分享更多关于并行编译的内容。
荒野的信息是我们最初的案例研究。 许多更喜欢冒险的用户使用游戏来检查是否尝试启用SPIR-V。 因为有一些……嗯……容易发现的问题。
上一个:
塞尔达传说荒野的气息
之后:
塞尔达传说荒野的气息
接下来,让我们看一下在最近几个更改之前没有直接使用SPIR-V启动的游戏。 真女神转生v :
真女神转生v
怪物猎人的兴起:
怪物猎人“崛起”
纸片马里奥:
马里奥“折纸王国”
Vulkan够了一点吗? 我们希望你太累了,不能继续下去。 因为Vulkan以外的生活也引起了一些重要的关注。
图形处理装置
向顶点舞台添加渲染比例支持。
在游戏中,您可能可以在顶点阶段读取textureSize,以通知片段着色器纹理的大小。 不需要查询。 以前,因为顶点着色器中不存在用于调整大小的缩放,所以游戏为片段着色器提供了原始的放大纹理大小。 这是不正确的行为。 这有两个缺点。 一种情况是,片段和顶点支持缓冲区的说明必须相同,因此使用时必须定义大小完全的scales数组。 另一个是,使用顶点着色器纹理时必须更新片段纹理计数。
修复了在超级马里奥派对和世界游戏大全51中引起奇怪偏移的渲染百分比。 (世界游戏大全51在着色器上做其他事情,所以在很多游戏中有像素化的外观。 这也修复了回归。 升级塞尔达无双、灾荒启示录等游戏后,会出现一些线路伪影。 超级马里奥派对
超级马里奥派对
塞尔达无双:灾荒的启示
塞尔达无双:灾荒的启示
塞尔达无双:灾荒的启示
纹理同步、不兼容的重叠处理和改进的数据更新。
这是相当大的更新。 此大更新旨在解决由纹理更改和数据更新引起的一系列问题,主要是按句柄而不是按视图处理数据更新,并将更新与同步点增量同步。 此外,还引入了新的后端方法,因此当前与Vulkan不兼容。
第1部分:刷新同步纹理
这个变化已经酝酿了一段时间。 第一次添加通过内存跟踪更新纹理时,CPU和其他组件速度相当慢。 GPU和CPU的关系非常紧密,几乎可以肯定,当游戏尝试访问数据时,数据完成,其中有数据是偶然的。 这并没有持续很久。 随着时间的推移,开始出现在数据完全准备好之前纹理被冲刷,产生白水的问题。
塞尔达传说荒野的气息
喷气战士的彩虹之灯:
喷气战士
由于多线程和Vulkan的添加,情况变得更加复杂,人们认为这是回归。
为了解决这个问题,我需要看看在所有这些清洗和纹理中发生了什么,以及我在写这篇文章之前必须找的其他单词。 游戏更新纹理数据时,通常会有通知告知系统是否还有需要的数据。 如果不用这个系统,一切都将是掷骰子,最终可能导致CPU和GPU之间的竞争。 虽然这在纸面上听起来很酷,但实际上这是一场噩梦,最终是未定义的行为,所以对后端进行了一些改变,让GPU在比赛中总是获胜。
第2部分:不兼容数据的刷新顺序
目前,Ryujinx遵循纹理缓存的核心假设,而纹理的使用遵循其自己的布局格式。 请想象这是shape size。
这一核心假设是通过不更新或加载“垃圾”数据,使重要纹理数据保持活动状态,从而节省时间。 很好吧? 那么,这里是踢踏舞选手。 这个规则以前没有完全确立,所有规则都像往常一样有例外……。
问题是,不兼容的纹理只有在出现新的叠加时才会被删除,而只有在创建纹理时才会被删除。 如果两个纹理同时存在于缓存中,则可以刷新每个纹理。 以任意顺序。
这就是新规则发挥作用的地方。 简而言之,如果写入了一个纹理,而其他纹理尝试使用其内存,则该数据将被视为无效。 这意味着每次只存在一个,所以数据更新总是使用最新的可用信息。 问题解决了! 请注意,这些规则早就存在,并且只是在创建时强制执行,而不是每次使用时强制执行。 这是影响每场比赛的一个巨大的根本性变化。
第3部分:更新主机不兼容的格式
稍微切换一下,可能会使用不完全支持的纹理格式和关系。 这两个例子是:
讽刺的是,除英特尔iGPU外,台式机GPU不支持的ASTC压缩纹理。
OpenGL不支持BCN压缩的3D纹理。 (但是,Vulkan支持此功能。 ) )
Ryujinx通过将其转换为CPU支持的未压缩格式来支持这些格式。 但这意味着无法通过GPU直接访问数据。 这对于……渲染内容非常重要。 谁都可以推测,这不是理想的,而是引起了主机整体的问题。
奇妙的人生:在本色和其他幻想的4引擎游戏中,可能会使用ASTC纹理处理角色和环境。
奇妙的人生:本色
BotW绘制压缩的3D BCn纹理,用于用蓝色融化瞬间移动的画。
正在加载视频.
以前,Ryujinx无法移动此纹理的数据,因此Link很快就消失了。 虽然解决此问题的速度不是最快的,但它完全兼容,涵盖了以前完全损坏的情况,将来可以支持移动硬件等不支持BCn的平台。
奇怪的人生:
正在加载视频.
塞尔达荒野信息:
正在加载视频.
因此,在相当长的部分之后,一起看看漂亮的照片吧。
塞尔达传说荒野的气息
喷气战士2不会自己再生,而是在整个地图上放飞彩虹(不确定这是w还是l ) :
喷气战士2
我们在这里得到了教训。 现在,如果你继续在riperiperi上喊“CEMU MILK WATER GX2DRAW DONE”,他可能会解决气候危机。 如果那会让你闭嘴的话! 某种意义上,他做了。 海拉尔的水又干净了。
修改采样的多重采样纹理大小
渲染目标和复制纹理的宽度/高度由驱动程序预先与多重采样纹理相乘。 对于池中的着色器采样纹理,不会进行预增强。 传递到后端的TextureCreateInfo无法精确纹理的大小,因为宽度和高度除以采样数。 修复了大神HD的渲染。
大神:绝景版
实现IMUL、PCNT和CONT着色器命令以修复FFMA32I和HFMA32I
Ryujinx可以执行各种自制的APP应用程序,但有些应用程序不能比其他APP应用程序更好地工作。 MelonDS,Nintendo DS模拟器向我们介绍了我们以前不知道的IMUL、PCNT和CONT着色器命令。 最后两个类似于现有的PBK/BRK和SSY/SYNC。 是的,在实现它们时,在修改过程中修复了FMUL32I指令的实现。 因此,第三个操作数不存在指令,因此必须使用目标寄存器而不是" SrcC "。 与上述问题类似的问题HFMA32I也是同样的,但由于命令表中也缺少这一点,因此得到了修复。
修复检测为不兼容重叠的相邻三维纹理切片
Texture Sync带来的变化相当大,但也出现了一些问题,使得异型刃游戏出现了奇怪的颜色分级。 基本上发生的事情是大多数切片的渲染3D纹理数据都丢失了。
修复大小不匹配时渲染目标的清除
对于OpenGL和Vulkan,如果绑定的渲染目标大小不同,则仅在所有大小不同的交点处进行渲染。 在GPU中,该剪辑由ScreenScissorState寄存器对控制。 此寄存器以前大部分被忽略,但如果清除时绑定了不同大小的渲染目标,且游戏尝试清除其中一个渲染目标,并且屏幕裁剪的大小与清除的目标匹配,则可能会出现问题OpenGL修剪到最小大小,不擦除整个区域。 该问题通过强制释放所有其他渲染目标来解决,以避免主机片段,然后使用根据屏幕裁剪和用户裁剪(0)计算的自定义裁剪区域。 修正了没有完全清除画面的Pathway。
添加BGRA格式的功能
这增加了一个名为SupportsBgraFormat的新功能。 在OpenGL中,API始终是错误的,因为它不支持BGRA纹理格式。 但是,由于Vulkan设置为true,因此您可以在其中使用这些格式,而无需自己在片段着色器的输出中交换组件。 这里的主要目标是减少Vulkan分支和当前分支之间的差异,以便于审阅。
停止使用glTransformFeedbackVaryings,并在着色器中使用显式布局
在Nintendo交换机中,在OpenGL中启用此功能时,有两种方法指定应写入转换反馈缓冲区的内容。 第一,使用glTransformFeedbackVaryings函数传递要写入的着色器输出的名称。 新方法是使用布局修饰符直接指定给着色器。 这个变更实现了后者。 这是因为,Vulkan仅支持后者,而Vulkan没有指定着色器以外的信息的“TransformFeedbackVaryings”函数。 实际上,这个更改的大部分代码来自Vulkan分支。 因此,这里的主要优点是减少与Vulkan和Master的差异。 这样更容易审阅,并且两个API都可以使用相同的方法。 这种新方法的一个限制是,例如,不能将同一输出写入多个缓冲区。 但是,您可以创建多个输出并复制值。 但是,由于游戏中还需要指定转换反馈布局,所以它们也应该同样受到限制。
0次绘制完成时,GPU计数器报告的死锁Nintendo Switch上的某些游戏使用所谓的条件渲染。 如果条件为真或假,游戏将在那里呈现不同的用户界面( UI )标签。 Ryujinx可能会发生罕见的错误。 这意味着,报告显示包含绘制了0次的区域的计数器可能会导致GPU死锁。 如果此写入操作与跟踪操作重叠,则GPU最终可能会等待计划在将来执行的操作,从而导致阻塞。 以前,这一点会被立即报告,并从后端线程向客户的内存写入结果。 启用后端线程不允许后端线程触发在GPU上等待的读取操作。 这是因为最终有可能等待自己,永远不前进。 对于后端多线程SyncMap,同步对象基于GPU和跟踪存在,但由于尚未由后端创建,因此它将尝试等待不完全存在的后端同步对象。 修改方法与其他事件一样,只需对0绘制事件进行排队,并将_bufferMap值强制为0,即可与计数器队列中的其他事件一起更新。 这样就修复了条件渲染问题游戏,如超级马里奥奥德赛、马里奥赛车8和喷气战士2
添加对BC1/2/3解压缩的支持(用于3D纹理)
对于明显的纹理同步更新,添加了对在不支持的压缩格式中更新不兼容的重叠的支持。 但是,只支持BC4和BC5压缩格式。 它已扩展为支持BC1、BC2和BC3格式。 这修复了在OpenGL中使用3D纹理格式的游戏中损坏的纹理。 Vulkan支持3D压缩格式,因此没有这个问题。 其他更改包括新的“Supports3DTextureCompression”功能。 在OpenGL中始终为false,但在Vulkan中将其设置为true,并更改了GpuContext的Capabilities属性以避免复制
已删除Bc1Rgb格式。 它们没有被使用(实际上非常没用)。 因为RGB和RGBA的变体之间没有区别。 除了忽略alpha分量外,还可以通过将swizzle的alpha设定为1来实现),最后对现有的BC4和BC5减压器进行了优化。 BC4在这里约快2.5倍,BC5约快2.1倍。 (使用随机生成的256x256x2 3D纹理进行测试。
Vesperia故事的文本被修正了。
修复了异度刃2处的爆炸。
异度刃2
修改res缩放参数未更新的顶点着色器
在Ryujinx之前,如果平面阵列的比例在技术上相同,则不会更新渲染比例阵列,但顶点比例的开始索引不同。 如果顶点阶段具有绑定,并且自上次更新渲染比例以来更新了片段阶段的绑定数量,则此操作将通过更新支持缓冲区中的比例来解决问题。
在16字节/4字的信号量版本中添加时间戳。
《塞尔达传说:旷野之息》有错误。 游戏在Ryujinx上以20 fps的速度运行。 如果以全速运行,超过该速度将会超过本机帧速率。 这是不正确的行为,这是长期存在的错误,只是因为问题不对劲,很难推翻开发者。 经证实,游戏在信号量释放后读取了ulong 8字节。 这是尝试计算性能的时间戳,因此仅在必要时写入。
这修改了塞尔达的传说。 荒野气息一直被限制在20fps。 现在只有在游戏运行太慢的情况下才会这样做。
CPU/HLE/内核
ffmpeg :添加其他检查和错误消息
某些游戏使用H264视频编码在ffmpeg上下文中向用户显示。 如果系统中未安装正确的软件包,Ryujinx将崩溃,错误为null。 这当然是不可取的。
这增加了一些错误检查和日志记录,以通知用户如果没有安装所需的软件包,最重要的是防止“随机”崩溃。
实现CPU-fcvtms (载体
我们还在找新旧游戏。 它们使arMeilleure(RyuJinx的CPU动态编译器)进入了轨道。
这一更改实现了FCVTMS矢量CPU指令,可以立即启动XCOM 2等游戏。 与不断的CPU命令的斗争仍在继续……
更新为LibHac 0.15.0
LibHac更新涉及许多错误修复和新游戏。 由于文件系统的正确性提高,这些新游戏现在将开始。
但是,这次的新版本相当于大扫除,对代码进行了一些重组和小改动。 这些更改的目的是使我们的开发人员和最终我们的用户将来对文件系统代码的更新更加无缝。
sfdnsres :实现NSD分析
修复了请求某些网络相关服务“GetAddrInfoRequest”和“GetHostByNameRequest”时NSD使用不足的实现。
这是本报告的许多网络修复之一!
禁用来宾互联网访问会返回DNS解决错误
一些游戏,特别是古行星狼4的时机已经到来,并被证实会在启动过程的初期尝试连接服务器。 在进行此修复之前,如果禁用来宾网络选项,将无法搜索DNS并继续出现错误,因此游戏会立即崩溃。
如果禁用允许崩溃重新启动的设置,此更改将恢复为以前的行为。
sdns RES :阻止与npln服务器的通信尝试
最近,任天堂正在用新的“NPLN”服务器替换老化的“NEX”服务器系统! 下次的粉碎也许可以回滚……
怪物猎人(一些游戏,比如崛起,是最早部分使用这个新系统的游戏之一,当然很快会有更多的游戏问世。 此更改只需将新服务器添加到内部DNS阻止列表中。
帐户:重做LoadIdTokenCache自动生成随机的JWT令牌
许多交换机服务器使用jwt(JSONweb令牌)进行身份验证。 JWT是一种在服务器之间传递信息而不存储在数据库中的简单、标准化的方法。
这意味着提高在使用此调用时将提高Ryujinx的准确性,使其更接近硬件实现。
BSD :更改API,抽象套接字
大家可能都知道,Ryujinx已经是一个有4年历史的项目,所以一些代码库暂时还没有出现。 想想四年前你在哪里!
网络修复1月初风靡一时,是时候再次冒险突破漏洞,回归API和套接字功能了。 这里的变更、更新、现代化名单非常广泛,其中包括
套接字实现与IClient类的隔离(如果需要,允许将来可能的套接字本地实现) ) )。
IClient的IPC代码已更改为使用更现代的内存API
SSL :实现SSL连接
对于SSL或我们没有网络背景的读者,“securesocketslayer”是一种用于在网络计算机之间建立加密链接的协议。 这与https网站上提供小挂锁的协议相同。 请参阅。
某些APP应用程序需要通过SSL验证的连接才能启动/查看交换机或扩展Ryujinx的内容。 其中特别包括当前正常运行的Twitch等APP应用程序。
修复32位标题返回类型中的不匹配
在几个月前通过CPU重新编译器进行了优化的尾部合并后,由于地址为32位而不是64位,因此可能会出现返回类型与函数的实际返回类型不匹配的小问题。 而且这会引起游戏中断,引起混乱!
此更改解决了中断和导致中断的问题。
内核:修复被中断处理程序固定时的死锁
即使是我们中最优秀的人也会犯看起来相当严重的小错误。 简单错位的重要部分使一些游戏陷入了僵局,包括愤怒的首领蜂大复活和可能的其他游戏。
幸运的是,你基本上只需重新调整两行代码,它就会很快被纠正!
图形用户界面/其他
添加金手指管理器
金手指是电子游戏中不可缺少的部分,我们的一位开发者认为它也应该是Ryujinx中不可缺少的部分。 在此更改之前,金手指在技术上运行良好,但始终完全适用,用户无法在运行时切换它们,也无法从较大的列表中选择想要激活的金手指。 这可以通过金手指管理器切换。
通过进行此更改,解析了金手指文件,并实现了自己的金手指管理器,允许在运行时有选择地启用这些文件。 使用Actions - Manage Cheats在游戏中尝试(请先正确放置有效的金手指文件! 请参阅。
实施模拟范围修改器
没有方向盘就完美了。 无论PlayStation用户如何努力说服,模拟杆都会随着时间的推移像其他东西一样磨损。 死区漂移调整有助于减轻棒的漂移,但这些旧控制柄可能无法达到与过去相同的最大值,就像人类老年时那样。
范围修改可使您在轴上快速到达控制器的“最大”输入,从而使旧的和设计不同的手柄可以输入完整的方向。 任天堂明星大乱斗特别版这样的游戏需要完整的输入才能继续冲刺,所以这个变化也有助于确保新的控制器也能更容易地运行这样的技术。
结束语:
到目前为止,2022年对我们来说是非常多事情的一年! 本报告的最后一部分可能会对网络用语感到无聊,但允许Nintendo Direct x Ryujinx交叉。
我们谈论在Avalonia上重写UI已经有一段时间了,但我们想向任何人保证。 进展依然强劲,其中也有时间变得非常漂亮。
新UI
句柄设置窗口
感谢大家一直以来的支持。 希望下个月能给您更多的信息。
光遇1.23每日任务该怎么完成呢?在光遇世界有着各种精彩有趣的任务内容,玩家可以完成后获取大量的游戏奖励,小编
《云顶之弈》这游戏中卢安娜的飓风这件武器最近版本更新中被强化了,分裂攻击的伤害效果大大提升。有些小伙伴
迷你世界激活码2023是哪些呢?在精彩有趣的全新挑战活动中,玩家可以体验到更多丰富的游戏奖励。小编今天准备了
很多传奇的老玩家关心关于贪玩蓝月祝福油怎么用的相关问题,今天柠檬友玩小编给大家搜集整理了如下内容,希望对
《魔兽世界怀旧服》中存在着多样的公会制度,DKPROLL团就是其中之一,关于这个制度的意思好优劣势,本文将为你解
斗罗大陆魂师对决阵容最佳搭配2023,新版本上线了很多魂师,我们应该如何搭配呢?以下为大家分享新版本顶级阵容大
时间:2022-12-06
时间:2022-12-06
时间:2022-12-06
时间:2022-12-06
时间:2022-12-06
时间:2022-12-06
时间:2022-12-06
时间:2022-12-06
时间:2022-12-06
时间:2022-12-06