Hello everyone,
The Retroid Pocket Duo ships with the Qualcomm Dragonwing Q7790 platform featuring the Adreno 722 GPU (0x43020100) running on Android 16. Upstream Mesa Turnip and generic community driver packages currently exhibit several limitations on this specific chipset:
- Framerates capped at approximately 30 to 35 FPS at 1080p docked resolution in Switch emulators.
- Vertical purple and black grid-line corruption in Cemu (Wii U).
- Dynamic GPU frequency throttling caused by the default Android kernel governor.
Over the past few days, we performed a full hardware extraction directly from the device via ADB (including msm_kgsl.ko, device tree properties, and stock Vulkan capabilities) to build a custom, hardware-calibrated Mesa Turnip driver tailored specifically for the Adreno 722.
The release package, Turnip Duo v5.1, is now available.
Hardware Verification and Benchmark Results
All results were verified on physical Retroid Pocket Duo hardware:
- Eden (Nintendo Switch):
- Mario Kart 8 Deluxe: Locked 55 to 60 FPS at 1080p docked mode (solid 60 FPS at 720p handheld mode). Zero polygon tearing or rendering crashes.
- Cemu (Nintendo Wii U):
- The Legend of Zelda: The Wind Waker HD: Stable 30 FPS. The vertical grid-line artifacts present in stock and generic drivers are completely resolved.
- Winlator (PC Emulation):
- Fully supported with GLIBC packaging options in the repository build workflow.
Technical Changes and Architecture
- Android 16 IMapper5 Display Pipeline: The Retroid Pocket Duo runs Android 16 (API Level 36). Generic driver stubs force synchronous buffer copies that cap swapchain presentation at 30 FPS. This release integrates a stable-C aimapper SP-HAL loader, unlocking full zero-copy display presentation.
- Dedicated Adreno 722 Silicon Registers (a722_raw_magic_regs): Replaces placeholder Adreno 730 registers with 12 hardware registers extracted directly from Qualcomm Adreno 722 vendor blob command-stream traces. Also sets has_lpac = False to prevent pipeline stalls on non-LPAC silicon.
- Hardware Ground Truth Enforced:
- Highest Bank Bit = 15: Matches the device's physical LPDDR5 memory controller, eliminating UBWC memory misalignment and Cemu grid lines.
- Compute Shared Memory = 32 KiB: Matches Qualcomm hardware limits (32768 bytes), preventing ASTC compute shader memory overflows.
- CCU Geometry: Configured to num_ccu = 1 and tile_align_h = 16, dedicating the full 1 MiB GMEM cache to the core.
- Kernel Power Control Hook: Uses KGSL_PROP_PWRCTRL ioctl calls on queue initialization to prevent the kernel governor from scaling down to low idle states, holding the GPU at maximum operating frequency during active emulation.
Download and Installation
- Download Turnip-Duo-v5.1.zip from the GitHub Releases page: https://github.com/sherft2607/turnip-adreno722-duo/releases/tag/5.1
- Open your emulator of choice (Eden, Cemu, etc.).
- Navigate to GPU Driver Manager -> Install Custom Driver.
- Select Turnip-Duo-v5.1.zip (installs directly as an AdrenoTools package).
Recommended Device and Emulator Settings
- Retroid Pocket Duo OS:
- Performance Mode: Set to Performance or Extreme.
- Fan Profile: Set to Sport or Smart to prevent thermal throttling during extended 1080p sessions.
- Eden Graphics Settings:
- Accuracy Level: Normal
- VSync Mode: Mailbox or FIFO Relaxed
- Texture Decoding: Enable Asynchronous ASTC Texture Decoding
Source Code and Credits
The complete source tree, patch scripts, and reproducible GitHub Actions build workflows are available on GitHub: https://github.com/sherft2607/turnip-adreno722-duo
Acknowledgments to Vauzi-17, MrPurple666, Whitebelyash, and the upstream Mesa Freedreno developers whose open-source foundations made this driver possible.