Skip to content

Releases: EtherealIntellect/moonlight-android

v0.2 - DEVICE Composition via HardwareBuffer + SurfaceControl (Mali, 10ms)

Choose a tag to compare

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

  1. Install APK
  2. Enable Front Buffer Rendering in settings
  3. Set app orientation to Portrait in Moonlight settings
  4. Set video scaling to Fill (not Fit)
  5. 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)

Pre-release

Choose a tag to compare

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