Experimental GPU acceleration for Linux applications running through Termux, Termux:X11, and uDroid/PRoot on Google Tensor G1 devices with Mali-G78 graphics.
This repository carries three deliberately separate acceleration paths:
| Path | API and userspace | Rendering and presentation |
|---|---|---|
| Panfork/Panfrost | OpenGL and OpenGL ES in glibc PRoot distributions | Patched Mesa submits directly to Android Kbase /dev/mali0; GLX DMA-heap display targets use DRI3, while EGL retains the CPU presenter. |
| Mali Vulkan wrapper | Vulkan for native Termux/Bionic programs | Mesa wrapper adds X11/XCB WSI around Android's proprietary Mali Vulkan driver. |
| libhybris Vulkan | Vulkan for glibc PRoot programs | sysvk and libhybris call the Android Mali Vulkan HAL; a patched WSI layer presents DMA-BUFs through Termux:X11 DRI3. |
It also carries an experimental rootless H.264 decode bridge. A native Termux
service runs Tensor's Exynos MediaCodec component; GStreamer or a glibc VA-API
driver feeds it from Jammy. Stock Firefox now detects that VA driver and enters
hardware decode without a custom build. A deferred DMA-BUF export workaround
also keeps YouTube AVC playback on hardware across the tested 360p-to-480p
adaptive switch. See tensor-g1/media-codec/README.md.
An optional rootless AHardwareBuffer broker now allocates Panfrost X11 display
targets that Termux:X11 can import through its existing private DRI3 modifier.
It improves the measured Firefox Present rate substantially, but GNOME/Mutter
composition remains far from native Android video performance. See
tensor-g1/ahardwarebuffer/README.md.
None of these paths replaces the Android kernel driver. The Vulkan routes are not PanVK, and the OpenGL path does not use ANGLE, Zink, VirGL, or Vulkan.
src/ patched Panfork/Mesa source
tensor-g1/README.md Panfork bring-up and verified status
tensor-g1/panfork/ launchers, probes, and test utilities
tensor-g1/perf/ layered benchmarks, metrics, and Perfetto config
tensor-g1/vulkan-wrapper/ pinned wrapper recipe and patch series
tensor-g1/hybris-vulkan/ rootless glibc Vulkan launcher and DRI3 fix
tensor-g1/screenshots/ unedited device captures
README.rst original Mesa/Panfork project README
The open-source Panfork path reports Mali-G78 (Panfrost) and runs EGL, GLX,
glxgears, glmark2, GNOME, and SuperTuxKart. Its rootless DRI3 path removes the
old per-frame client readback/upload; a three-slot Present queue recycles
DMA-heap buffers after the X server releases them. Termux:X11 still performs
the final server-side copy. Known limitations are documented in
tensor-g1/README.md.
The proprietary Vulkan path reports the real Mali-G78 r54p3 driver with Vulkan
1.4.305. XCB presentation is verified with vkcube both directly in Termux and
when the same Bionic binary is launched from a Jammy PRoot namespace. See
tensor-g1/vulkan-wrapper/README.md.
The rootless glibc Vulkan milestone adds a third route through sysvk, patched
libhybris, and an X11 WSI layer. DMA-BUF allocation and DRI3 presentation are
verified from Jammy without root, including a 1,800-frame soak. See
tensor-g1/hybris-vulkan/README.md.
Performance work uses local media and promotes changes from component probes to direct-X browser playback and only then a full desktop. The checked-in performance laboratory records stage timers, process CPU/RSS/I/O, frame-delivery tails, optional short Perfetto traces, and upstream/spec-derived correctness cases. Its current progress includes memory and Firefox playback graphs for the latest GNOME promotion.
This is research and prototyping code, not an official Google, Arm, Mesa, or Termux driver. The Panfork changes are intentionally invasive and are not upstream quality. Keep experimental installs isolated, preserve ADB access, and expect rendering bugs, GPU faults, presentation fallbacks, and ABI limitations.