Difference between revisions of "RUINER"
Line 50: | Line 50: | ||
The Linux version uses a VLC playback mechanism as part of Unreal's '''UMediaPlayer''' object, while the format still being in bink. | The Linux version uses a VLC playback mechanism as part of Unreal's '''UMediaPlayer''' object, while the format still being in bink. | ||
These movies don't render correctly even on an x86 device, so it is an application bug. | These movies don't render correctly even on an x86 device, so it is an application bug. | ||
+ | |||
+ | === Linux version memory leak === | ||
+ | FEX had a memory leak one thread teardown. Because this game spins so many threads, this was consuming more than 100MB/s in memory leaks. Final memory leak fix is fixed in [https://github.com/FEX-Emu/FEX/pull/4517 this pull request.] | ||
== Testing Results == | == Testing Results == |
Revision as of 03:03, 18 April 2025

Storefronts | ||
Operating Systems | Windows, Linux | |
Engine | Unreal Engine 4 | |
Architecture | x86-64 | |
CPU Features Used | Unknown | |
Compatibility | Playable | |
Type | Game | |
Render API | OpenGL |
Steps to Run
No special instructions
Quirks
Problems/Workarounds
- Crashes early on with Snapdragon 888 and Freedreno
- Zink untested
- Snapdragon needs retesting!
Slow in-game on Linux version
The Linux port of the game is creating and destroy threads at upwards of 720 threads per second. This is causing the game to run very slowly because thread creation under FEX is relatively heavy.
- Caused by some VLC playback library? Game is creating and destroying a VLC object on every engine tick.
- Recommended to use the Proton version until FEX's thread creation is faster and/or code sharing between threads is supported.
(gdb) bt #0 __pthread_create_2_1 (newthread=0x94e43b0, attr=0x7ffe3f3886f0, start_routine=0x7205e1856620 <Run>, arg=0x94e3b50) at ./nptl/pthread_create.c:626 #1 0x00007205e189d03d in vlc_clone_attr (th=0x94e43b0, attr=0x7ffe3f3886f0, entry=0x7205e1856620 <Run>, data=0x94e3b50, priority=<optimized out>) at posix/thread.c:482 #2 0x00007205e189cf06 in vlc_clone (th=0x94e43b0, entry=0x7205e1856620 <Run>, data=0x94e3b50, priority=10) at posix/thread.c:494 #3 0x00007205e18565a2 in input_Start (p_input=0x94e3b50) at input/input.c:183 #4 0x00007205e1411766 in libvlc_media_player_play (p_mi=0x851bd00) at media_player.c:1008 #5 0x0000000004d2b081 in FVlcMediaPlayer::SetRate (this=0x7205b6721e40, Rate=<optimized out>) at E:\repo\Plugins\VlcMedia\Source\VlcMedia\Private\Player/VlcMediaPlayer.cpp:177 #6 0x0000000004d2cf3e in FVlcMediaPlayer::TickPlayer (this=0x7205b6721e40, DeltaTime=<optimized out>) at E:\repo\Plugins\VlcMedia\Source\VlcMedia\Private\Player/VlcMediaPlayer.cpp:453 #7 0x00000000040ccea1 in UMediaPlayer::Tick (this=0x72065f819580, DeltaTime=2.84558105) at E:\engine\Engine\Source\Runtime\MediaAssets\Private\Assets/MediaPlayer.cpp:729 #8 0x00000000040cd34a in non-virtual thunk to UMediaPlayer::Tick(float) (this=0x94e43b0, DeltaTime=0) at E:\engine\Engine\Source\Runtime\MediaAssets\Private\Assets/MediaPlayer.cpp:747 #9 0x00000000020ac62e in TBaseDelegate<bool, float>::Execute (this=<optimized out>, Params=2.84558105) at E:\engine\Engine\Source\Runtime\Core\Public\Delegates/DelegateSignatureImpl.inl:537 #10 FTicker::FElement::Fire (this=<optimized out>, DeltaTime=<optimized out>) at E:\engine\Engine\Source\Runtime\Core\Private\Containers/Ticker.cpp:115 #11 FTicker::Tick (this=0x693c260 <FTicker::GetCoreTicker()::Singleton>, DeltaTime=<optimized out>) at E:\engine\Engine\Source\Runtime\Core\Private\Containers/Ticker.cpp:82 #12 0x0000000001e5e365 in FEngineLoop::Tick (this=0x6887a40 <GEngineLoop>) at E:\engine\Engine\Source\Runtime\Launch\Private/LaunchEngineLoop.cpp:3263 #13 0x0000000001e5ec5a in EngineTick () at E:\engine\Engine\Source\Runtime\Launch\Private/Launch.cpp:62 #14 GuardedMain (CmdLine=<optimized out>) at E:\engine\Engine\Source\Runtime\Launch\Private/Launch.cpp:176 #15 0x000000000411f4a8 in CommonLinuxMain (argc=<optimized out>, argv=<optimized out>, RealMain=<optimized out>) at E:\engine\Engine\Source\Runtime\Linux\LinuxCommonStartup\Private/LinuxCommonStartup.cpp:236 #16 0x00007206ace2a3b8 in __libc_start_call_main (main=main@entry=0x1e62cb0 <main(int, char**)>, argc=argc@entry=2, argv=argv@entry=0x7ffe3f388e98) at ../sysdeps/nptl/libc_start_call_main.h:58 #17 0x00007206ace2a47b in __libc_start_main_impl (main=0x1e62cb0 <main(int, char**)>, argc=2, argv=0x7ffe3f388e98, init=<optimized out>, fini=<optimized out>, rtld_fini=<optimized out>, stack_end=0x7ffe3f388e88) at ../csu/libc-start.c:360 #18 0x0000000001e59868 in _start ()
Movie rendering problems on the Linux version
The title screen, transition from title screen, and cutscenes in certain dialogue options are all movies. On Windows these are all using bink videos and render fine in Proton. The Linux version uses a VLC playback mechanism as part of Unreal's UMediaPlayer object, while the format still being in bink. These movies don't render correctly even on an x86 device, so it is an application bug.
Linux version memory leak
FEX had a memory leak one thread teardown. Because this game spins so many threads, this was consuming more than 100MB/s in memory leaks. Final memory leak fix is fixed in this pull request.
Testing Results
This title has been tested on the environments listed below:
Test Entries | ||||||
---|---|---|---|---|---|---|
Revision | Arch of Title | SoC | GPU | Result | Tester | |
FEX-2504-66-g8ff7497 | x86-64 | Radxa Orion O6 | Radeon Pro W7500 | Works fine with quirks | Sonicadvance1 | |
FEX-2207 | x86-64 | Snapdragon 888 | Adreno 660 | Crashes with Freedreno | Sonicadvance1 |