Releases: EtherealIntellect/moonlight-android
Releases · EtherealIntellect/moonlight-android
Release list
v0.2 - DEVICE Composition via HardwareBuffer + SurfaceControl (Mali, 10ms)
HardwareBuffer FBO + SurfaceControl.Transaction achieves DEVICE (hardware overlay) composition on Mali-G57, reducing display pipeline from 32ms to 10ms.
What it does
Bypass Android's triple-buffered SurfaceFlinger pipeline by rendering decoded video into a HardwareBuffer-backed FBO and submitting directly via SurfaceControl.Transaction.setBuffer(). The HWC presents the buffer as a hardware overlay - direct scanout, no GPU composition.
Requirements
- Android 13+ (API 33) for SurfaceControl.Transaction.setBuffer(HardwareBuffer)
- App must be in portrait mode with Fill scaling (to avoid ROT_90/SCALE which force CLIENT composition on MediaTek HWC)
- Tested on: Deutsche Telekom T Phone (MT6833 / Mali-G57 MC2 / Android 14)
How to use
- Install APK
- Enable Front Buffer Rendering in settings
- Set app orientation to Portrait in Moonlight settings
- Set video scaling to Fill (not Fit)
- Hold phone in landscape - the video content is rotated in GL
Results
- 50th percentile: 10ms (was 32ms)
- Janky frames: 9.91% (was 45%)
- DEVICE composition confirmed via
dumpsys SurfaceFlinger
Also includes (from v0.1)
- EGL single-buffer front buffer for Adreno GPUs (auto-detected)
- All derflacco Artemide optimizations
See the implementation guide for full technical details.
APKs for all architectures included.
v0.1 - EGL Front Buffer (Adreno, 198ms)
EGL single-buffer front buffer rendering for Adreno GPUs (tested on Snapdragon 821 / Adreno 530).
- Bypasses SurfaceFlinger compositor entirely
- 198ms human benchmark (vs 240ms stock)
- Uses EGL_KHR_mutable_render_buffer + EGL_SINGLE_BUFFER
- Visible tearing (acceptable for streaming)
- Only works on Adreno GPUs - Mali renders black
APKs:
- arm64-v8a - most modern phones
- armeabi-v7a - older 32-bit ARM phones