Skip to content

emulators/xenia-edge: add native Linux Xbox 360 emulator#15668

Draft
zognic wants to merge 5 commits into
batocera-linux:masterfrom
zognic:feat/xenia-edge
Draft

emulators/xenia-edge: add native Linux Xbox 360 emulator#15668
zognic wants to merge 5 commits into
batocera-linux:masterfrom
zognic:feat/xenia-edge

Conversation

@zognic

@zognic zognic commented May 2, 2026

Copy link
Copy Markdown
Contributor

Summary

Adds Xenia Edge as a new Xbox 360 emulator — a native Linux port of Xenia that runs without Wine, using Vulkan and ALSA/SDL directly.

Changes

New package (package/batocera/emulators/xenia-edge/)

  • CMake build with Qt6, SDL2, Vulkan, lz4, ALSA
  • Two build-fix patches for strict C++20 compliance (clang 18+ / GCC 13+): missing <tuple> and <algorithm> headers no longer pulled transitively
  • Pre-configure hook generates version.h (normally produced by upstream xb script)
  • Game patches installed to datainit → land in /userdata/system/configs/xenia_edge/patches/ at first boot

ConfigGen (generators/xenia_edge/xenia_edgeGenerator.py)

  • --storage_root / --content_root / --cache_root passed as CLI flags (required: storage_root is resolved before the TOML config is read)
  • Language and country use xenia-edge string keys ("French", "Spain") not integers
  • apply_patches only overwritten when explicitly enabled in ES; individual patch is_enabled flags managed by xenia UI only

ES features (xenia-edge.emulator.yml)

  • Resolution, VSync, ALSA/SDL audio, language, country, patches, cache mount, texture cache limits
  • Post-processing: FSR, CAS sharpening, FXAA / FXAA Extreme

Other

  • es_systems.yml: xenia-edge added to xbox360 emulators
  • Desktop launcher for PCManFM (conditional on BR2_PACKAGE_XENIA_EDGE)

Test plan

  • Build compiles on x86_64 Batocera target
  • Binary launches with correct storage root (/userdata/system/configs/xenia_edge)
  • Game launches from EmulationStation
  • ES features applied correctly (resolution, FSR, language)
  • Patch is_enabled flags preserved across ES launches
  • Desktop launcher opens xenia UI from PCManFM

zognic added 2 commits May 2, 2026 18:51
Xenia Edge is a native Linux port of Xenia — no Wine required,
uses Vulkan + ALSA/SDL directly.

- New package: CMake build from has207/xenia-edge, Qt6/SDL2/Vulkan/lz4/ALSA
- Build patches: fix missing <tuple> and <algorithm> headers for strict
  C++20 compliance with clang 18+ / GCC 13+
- Pre-configure hook generates version.h (normally produced by xb script)
- ConfigGen: --storage_root/--content_root/--cache_root passed as CLI flags
  (must be CLI — storage_root is resolved before the TOML config is read)
- Paths: configs in /userdata/system/configs/xenia_edge,
  saves in /userdata/saves/xbox360,
  patches in /userdata/system/configs/xenia_edge/patches (via datainit)
- ES features: resolution, VSync, ALSA/SDL audio, FSR/CAS/FXAA post-processing,
  language and country using xenia-edge string keys (not integers)
- apply_patches preserved across ES launches; patch is_enabled flags
  managed by xenia UI only
- Desktop launcher for PCManFM, conditional on BR2_PACKAGE_XENIA_EDGE
- es_systems.yml: xenia-edge added to xbox360 emulators
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
@dmanlfc dmanlfc added the 44 label May 4, 2026
@dmanlfc

dmanlfc commented May 9, 2026

Copy link
Copy Markdown
Collaborator

A good starting point although I tested earlier versions for v43 and they were underwhelming. What makes this better?

@Darknior

Darknior commented May 9, 2026

Copy link
Copy Markdown

A good starting point although I tested earlier versions for v43 and they were underwhelming. What makes this better?

I’m very interested to know what was disappointing about it.
Personally, I haven’t been able to test the native Linux version in Batocera, but I did test it on my work PC running Linux Manjaro.

For me, I played GOW 3 using Vulkan, and the game was perfectly smooth, playable, with no slowdowns or graphical glitches.
Because of that, I assume it deserves native integration, either alongside or ideally replacing the Wine version, right? Especially since, over time, this native version will inevitably become better than going through a Windows compatibility layer...

But I’d really like to know which games are causing problems, so I can test them on my PC as well and confirm whether the issue comes from the emulator itself or from Batocera... if that can help...?


Je suis très interressé pour savoir ce qui décevant ?
Personnellement je n'ai pas pu testé la version Linux native dans Batocera, mais je l'ai testé sur mon PC de travail sous linux Manjaro.
Et pour moi, j'ai joué à GOW 3 et en Vulkan le jeu était parfaitement fluide, jouable, sans ralentissement ni bug graphique.
De ce fait je suppose que ça mérite une intégration en natif, en plus ou au mieux en remplacement d'un version Wine, non ? Avec le temps en plus cette version native va forcément être meilleure que de passer pas un interpréteur Widnows ...
Mais je suis intéressé pour savoir les jeux qui posent problème, pour les tester aussi sur mon PC et confirmer ou pas si le souci vient de l'émulateur ou de Batocera ... si ça peut aider ... ?

@dmanlfc

dmanlfc commented May 16, 2026

Copy link
Copy Markdown
Collaborator

maybe the later versions are catching up, let me know when it's ready

zognic added 2 commits May 16, 2026 18:55
- Config.in: select BR2_PACKAGE_XENIA_EDGE for x86_64 (native Linux, no Wine)
- batocera-config-xenia-edge: redirect log to userdata for persistence
- Bump version to b0a1ea5f8 (111 new commits, Qt→wxWidgets migration)
- Dependencies: replace qt6base/qt6declarative with gtk3+pcre2 (wxWidgets uses GTK3)
- Remove QT_DIR cmake env (no longer needed)
- Remove Qt xcb platform plugin copy
- Remove runtime game-patches clone (now embedded in binary at build time)
- Add patch 0003: propagate --storage_root/--content_root/--cache_root/--log_file
  in both LaunchNewTitle() and LaunchTitleInNewProcess() fork/exec calls so
  paths are not lost when xenia relaunches for a game title
@Mars-Wave

Copy link
Copy Markdown

Great work! Would be very interesting to have this system in Batocera! Controller based emulated systems are the most seamless to have integrated imo

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Projects

None yet

Development

Successfully merging this pull request may close these issues.

5 participants