修复原神在小盒子上崩溃的问题

原神游戏在小盒子上运行会崩溃:

1715918043159-20240517-035403.png

其实之前解决QQ崩溃的问题同样对原神有作用,没修复QQ崩溃之前,原神开始还没下载资源就会崩溃,之前修复QQ时,是定位到mesa里对着色器优化的代码导致了crash,后面直接注释优化代码,解决问题:

1715918333370-20240517-035853.png

使用这个patch后,原神下载完所有资源,点击进入游戏,加载到最后还是会崩溃在 external/mesa/src/mesa/main/texobj.c的mesa_reference_texobj函数,引用了无效的指针,针对这个crash没有好的处理方法,想着打开mesa的调试开关试试能不能找到其他有用的信息,打开调试开关,重新编译mesa,运行发现崩溃的地方变了,崩溃在external/mesa/src/mesa/main/uniforms.c的断言上,assert(unit < ARRAY_SIZE(prog->TexturesUsed)),发现ARRAY_SIZE(prog->TexturesUsed)为192,unit是由调用者设置,所以修改了设置的逻辑:

这样游戏可以正常进入,只是游戏的场景显示有些不正常。后面把相关问题和调试结果通过issue反馈到mesa,得到开发者的反馈,验证提供的patch确实有效:

 

自己没玩过这个游戏,测试反映还是有些场景不对,还是有纹理丢失!