Skip to content

NetherSX2 v2.3 - ARM Mali GPU Optimized

Latest

Choose a tag to compare

@mininxd mininxd released this 20 Sep 06:31
· 13 commits to main since this release

This release brings major GPU rendering and memory allocation optimizations, tailored especially for Vulkan and ARM Mali GPUs globally, alongside clean vector touch controls and fully functional sub-native resolution scaling options.


🚀 Setup Wizard: Fast(Mali)/Unsafe Defaults

  • Preset Button Updated: The Setup Wizard preset button label is changed from Fast/Unsafe Defaults to Fast(Mali)/Unsafe Defaults, clearly indicating the Mali configuration while leaving the original description text and settings reset actions intact.
  • Pre-Selected by Default: On fresh installs, the Setup Wizard defaults to Fast(Mali)/Unsafe Defaults via patched classes.dex.
  • Default Renderer to Vulkan: Completing the Setup Wizard writes Vulkan (14) as the default backend instead of falling back to OpenGL (12).
  • Unsafe Preset Cycle Skip Fix: Patched NativeLibrary.setDefaultSettings in libemucore.so so the Fast/Unsafe preset keeps EECycleSkip = 0 (Normal) instead of 2. This eliminates animation jitter, desync, and black screens across all games while retaining the 25% CPU boost from mild underclocking (EECycleRate = -1).

⚡ GPU & Vulkan Rendering Optimizations

1. Light Lag & Bloom Elimination (Minimum Blending Accuracy)

  • Problem: When looking at light sources (sun glare, lens flares, streetlamps, bloom, coronas), games stack 30+ layered transparent blend passes in TBDR tile memory, causing frame rates to collapse from 60 to 15 FPS on Mali GPUs.
  • Fix: Configured default Minimum Blending Accuracy (accurate_blending_unit = "0"). Transparency math is computed in a single fast pass with zero tile thrashing.

2. In-Memory Texture Render Cache (Full Hash Cache)

  • Feature: Enabled Full Texture Preloading (texture_preloading = "2"). Decoded host textures (VkImage) remain resident in device RAM across frames, avoiding redundant re-rendering and texture-swap stutter.

3. Hardware Download Mode (HWDownloadMode = "1" - Disable Readbacks)

  • Eliminates synchronous vkCmdCopyImageToBuffer GPU pipeline freezes during light occlusion checks.

4. Game-Specific Glitch & Stability Fixes

Black (All Regional Versions):
  • SPS (Spiky Polygons Syndrome) Fix: Enforced vuClampMode: 3 (Extra) across all regional releases of Black (SLUS-21376, SLES-53886, SLES-54030, SLPM-66354, SLAJ-25078, SLKA-25372), completely eliminating vertex explosion and polygon tearing.
  • Light Strips & Sky Texture Fix: Preserved autoFlush: 1, roundSprite: 1, and mipmap: 2 to fix vertical light strips and lighting misalignment.
  • Lighting Preservation: Added minimumBlendingLevel: 2 so building and wall lighting render properly under global Minimum Blending.
Downhill Domination (SCUS-97177, SLES-52202):
  • Sun & Lens Flare Removal: Embedded the community post-processing patch (patch=1,EE,0029DBA5,byte,0) in GameIndex.yaml for both default and CRC 5AE01D98, completely disabling blinding sun glare and lens flares. Also disabled autoFlush (autoFlush: 0) for smooth 60 FPS gameplay.
Tales of the Abyss (SCAJ-20163, SLUS-21386):
  • Disabled forced autoFlush: 1 stalls to eliminate TBDR tile flush overhead.

5. Unclamped Resolution Scalers (0.05x, 0.1x, 0.25x, 0.5x) in C++ Engine

  • Patched the assembly in libemucore.so (fmov s0, s1) to eliminate the hardcoded 0.5f clamp, activating true sub-0.5x rendering:
    • 0.05x Native (~24p): 1/20 native resolution
    • 0.1x Native (~48p): 1/10 native resolution
    • 0.25x Native (~120p): 1/4 native resolution
    • 0.5x Native (~240p): 1/2 native resolution

6. Vulkan-First Backend & Threaded Presentation

  • Bypasses Mali's high-overhead OpenGL ES compiler and utilizes direct Vulkan command buffers.
  • Decouples vkQueuePresentKHR swapchain presentation calls into a dedicated presentation thread, eliminating frame-pacing micro-stutter.
  • Bypasses Mali dual-source blending bottlenecks via DisableDualSourceBlend.
  • Conserves tile memory bandwidth via SkipDuplicateFrames.

🧠 Core & CPU Allocation Enhancements (Mali / MediaTek / Exynos)

  • Multi-Threaded VU1 (EmuCore/Speedhacks/vuThread="true"):
    • Offloads Vector Unit 1 calculations to a separate CPU thread, unlocking 20%–50% throughput improvements on 8-core mobile processors.
  • Performance Cores Affinity (EmuCore/AffinityControlMode="7"):
    • Automatically pins emulation worker threads (EE, GS, VU1) to the high-performance Big cores (Cortex-A7x / Cortex-X) instead of letting the Android scheduler throttle threads onto power-saving Cortex-A55 Little cores.
  • Fast CDVD (EmuCore/Speedhacks/fastCDVD="true"):
    • Bypasses virtual disc seek delay.

🎨 Asset & Stability Fixes

  • Purged Custom Controller PNGs: Completely stripped all custom PNG controller button overlays.
  • Restored 34 Clean Vector XML Buttons: Injected the original AetherSX2 vector XML drawables (ic_controller_*.xml).
  • Crash Prevention: Rebuilt using resource-ID preserving methods with no scrambled resources.arsc table, guaranteeing clean launch without force-closing.