ARMSX2 2.9.3
So, our bug reporting feature was a wild success. Thank you to all the users who submitted reports. Many of them are great reports and will be useful for fixing issues, however many of them were not. The app now explains that you can’t run PS2 games on a PS1 BIOS. Also, you can’t run Turnip drivers on Mali GPUs, and a dozen of other common user errors. We also tell you if you left your refrigerator door open ;)
Anyways, here's what's new:
VR mode is here: play side by side in a phone headset, with the picture's size, distance and height set to fit your lenses. DNS host entries get names and on/off switches, touch sticks get an adjustable travel, and the driver list shows only the drivers built for your GPU, now with MdiEx as a drives source for Exynos devices. When a game can't start, ARMSX2 tells you why and what to do, and problem reports carry the log of the run before. Shadow of the Colossus, Stuntman and Spider-Man 3 draw their shadows faster, the ARM64 graphics, video and sound code is quicker, and the emulator needs less memory.
New
VR mode (side by side). For phone headsets: the game is drawn once in each half of the screen. VR picture size, VR picture distance and VR picture height fit the two pictures to your headset and lenses. Upscaling, TV shaders and frame generation still apply, and the on-screen controls step aside while VR mode is on, so play with a controller. Find it in Settings > Renderer and in the pause menu's Graphics tab. done by @jpolo1224
Named DNS host entries. In Settings > Network, each DNS host entry has a name, its hostname and IP address, an Enabled switch and Remove this host, so entries for several games can stay in the list and be switched on when needed. The screen reminds you that the entries are used only when Primary DNS or Secondary DNS is set to Internal. done by @jpolo1224
Stick travel. Settings > Controls > On-Screen Controls has a Stick travel slider, from 50 to 250%, that sets how far your thumb moves for full tilt on every touch stick. Lower reaches full tilt sooner, higher gives finer control, and the thumb art reaches the ring's edge at full tilt either way. done by @jpolo1224
Drivers for your GPU. The GPU Driver list shows only the drivers built for your device's GPU: the Turnip and Adreno Tools packs on Adreno, MaliSX2 on the Mali GPUs it supports, and the Exynos packs on Xclipse, where avavo's MdiEx releases now join the list. A release with one file per chip lists each one by name, like MdiEx 1480 v3.6, and on supported Mali GPUs the driver card recommends MaliSX2. Importing a driver zip works on every device. done by @bmdhacks and @jpolo1224
(This picture shows off the new driver source, and was taken before the change to only show GPU drivers pertaining to your device, Adreno/Mali/Exynos drivers etc).
Clear answers when a game can't start. If the BIOS is missing, can't be read, isn't a PS2 BIOS, or is a PS1 BIOS like the ps1_rom.bin copied from a PS3, the message says so and points you to BIOS Location to import your PS2's BIOS. When the graphics driver can't start the renderer, a popup message gives the reason, such as ANGLE on an older driver that offers only OpenGL ES 2.0. done by @bmdhacks
Problem reports say more. Reports also send the log of the run before, cleaned the same way as the current one, so a game that froze and was closed still gets its log to the developers. When a game stops on an emulation error or crashes, the log holds a detailed account of what the emulated CPU and the recompilers were doing at that moment. done by @bmdhacks
Automatic Performance Tuning tries more. For a game held back by the GPU, it first lowers Display Resolution (HW scaler) to the size the game renders at, which keeps every rendered detail. Hardware Download Mode now steps through Async, No Readbacks and Disabled, and a step that didn't help no longer stops it from trying the next. Changing Display Resolution yourself in a game's settings turns tuning off for that game, like the other tuned settings. done by @bmdhacks
Every new setting in every language. VR mode, the DNS host entries, Stick travel and the new BIOS messages are in all 19 of the app's languages. done by @jpolo1224
Faster
Shadows in Shadow of the Colossus, Spider-Man 3 and Stuntman. In Vulkan, the passes these games use to count shadow volumes are counted in the stencil buffer instead of being blended into a high-precision copy of the screen. On the RG 55G1, Shadow of the Colossus spends about a third less GPU time per frame; on a Retroid Pocket Flip 2 at 2x, Stuntman runs about 14% faster and Spider-Man 3 about 5% faster. done by @bmdhacks
Fewer clears in Jak 3 and similar games. When a draw reads the image it is drawing to, Vulkan skips clearing the copy it reads from whenever the draw can't sample outside that copy. In Jak 3 that is up to about 274 clears a frame. done by @bmdhacks
IOP thread on the slower cores. With the IOP thread on, it runs on the slower cores, leaving the fast ones to the EE, GS and VU1 threads. On chips with four fast cores, like the Dimensity 7300, that leaves a fast core for the app's own drawing, such as the on-screen controls. done by @bmdhacks
Gran Turismo 4. The game database turns the IOP thread on for Gran Turismo 4, which takes the sound mixing off the EE thread. done by @sunshineinabox
Graphics code on ARM64. Palette and colour table conversions, GIF packet checks, texture hashing, GS readbacks and the vertex kick all do less work, and a palette lookup or draw pipeline that repeats is reused instead of looked up again. done by @sunshineinabox
Bigger GIF buffers. On devices with 2 GB of RAM or more, the GIF's path 2 and 3 buffers hold 32 MB, so large image uploads keep the EE running instead of waiting on the GS. done by @sunshineinabox
Videos, texture packs and sound. FMVs decode with a NEON inverse DCT, texture packs decode BC7 and JPEG images with NEON, and audio time stretching uses NEON dot products. done by @sunshineinabox
Vulkan with VSync off. Vulkan keeps three swapchain images when VSync is off, so getting the next image doesn't wait on the compositor. done by @sunshineinabox
Touch sticks. Moving a touch stick only moves its thumb on screen, without rebuilding the controls for every finger movement. On-screen controls can also now be toggled from the quick menu. done by @bmdhacks
Less memory. ARMSX2 clears the emulated memory at boot without taking hundreds of megabytes of RAM for it, the recompilers' block tables use memory only for the parts a game touches, and microVU's jump tables take memory as they fill: about 58 MB less in a God of War II scene. done by @sunshineinabox and @bmdhacks
Optimized build trained on this release. The profile behind the optimized build is retrained on this release's code across the same 16 games. done by @bmdhacks
Fixed
Auto Progressive Scan in Burnout 3. Burnout 3: Takedown and other Criterion games ask for the progressive scan combo late in their intro, after the publisher logos, so Auto Progressive Scan now holds it until 30 seconds into the game. done by @jpolo1224
Lines on Mali Bifrost GPUs. With Vulkan on Bifrost GPUs like the Mali-G52 and Mali-G76, MaliSX2 included, the line shader reads only vertices inside the draw, so games that draw lines keep running. Found while reviewing a pull request by @Matheus290 (#954). done by @bmdhacks
Mali shader compiles. Vulkan's conversion, present and FXAA shaders get texture sizes from the app instead of asking the GPU, so they compile on the Mali drivers that couldn't compile that query, and anisotropic filtering does the same on Mali drivers older than r30. done by @sunshineinabox
MaliSX2 and PanVK. A workaround meant for Arm's own Mali driver now applies only there, so MaliSX2 and PanVK keep every stencil clear, and PanVK keeps push descriptors. done by @sunshineinabox
ANGLE after the device's OpenGL ES driver. Starting a game on ANGLE after one on the device's own OpenGL ES driver, without restarting the app, works reliably. done by @bmdhacks
Resume after an emulation error. Pressing Resume after a game stops on an emulation error shows the error again and keeps the game paused, instead of closing the app. done by @bmdhacks
VSync after switching renderers. After switching from Vulkan to OpenGL and back in a game, Vulkan keeps the VSync mode you chose. Based on a pull request by @Matheus290 (#955). done by @bmdhacks
RetroAchievements. Android uses the same RetroAchievements runtime as Linux and iOS, rcheevos 12.5, with its fixes for achievement sets that use {recall} and for malformed data (#941). done by @Matheus290
More accurate
Emulator core on ARM64. The VU1 thread's ring buffer never overwrites work that hasn't been read yet, IPU colour conversion with alpha thresholds covers the whole block, the optional NEON reverb clamps at every step like the default path, and R8G8B8 DDS replacement textures read only their own data. Floating-point trap settings and the recompilers' jump buffers are set correctly, and generated code stays clear of Cortex-A53 erratum 843419. done by @sunshineinabox
Software renderer texture coordinates. Textures drawn with extreme S, T and Q values land where a real PS2 puts them, following measurements of 8,245 cases on an SCPH-30001 console: the sign of Q carries over to S and T, and coordinates stop at the console's limits. done by @bmdhacks
Linux
Big Picture. Choice dialogs open on the option already chosen (#959), and the keyboard and gamepad cursor stays visible after the on-screen keyboard closes (#958). Based on pull requests by @Matheus290. done by @bmdhacks
Game list at startup in the SDL build. The SDL build scans your game folders when it starts, and picking a game during the scan no longer waits for it to finish (#947). Based on a pull request by @Matheus290. done by @bmdhacks
This Game texture packs. The texture pack browser, in the Qt build and in Big Picture, gets a This Game list while a game runs, with only that game's packs. done by @bmdhacks
Missing CPU features named. On an ARM64 CPU without a feature the build needs, ARMSX2 says which one when it starts. done by @sunshineinabox
Mali under Wayland. Vulkan recreates a window surface that reports no formats, as Arm's driver can under Wayland. done by @sunshineinabox
All the speed, memory and accuracy work above is in the Linux builds as well.
