Part F: engines and runtimes (OpenMW, Barotrauma, Godot 3 games, SDL3 GPU / raylib, skips, scan)
Measured on the PC in podman boxes (Xvfb 1920x1080, llvmpipe, apitrace). Everything not marked “measured” or “read in source (file:line)” is UNVERIFIED or an estimate.
OpenMW (OpenSceneGraph, 0.51.0, git 2026-10-18 master)
Verdict: Already GL 2.1 / GLSL 1.20 in its default configuration, so it is not GL3-blocked. Real work is big-endian (ESM and BSA readers do no byte swapping, so Morrowind.esm cannot be read on ppc64 today; M), then CPU and memory tuning for a 3.2 GHz in-order PPE with ~160 MB. Debian-ports ppc64 builds 0.51.0-1+b4. Data is non-free (Morrowind) unless one plays the CC0 Template and Example Suite. Novel on the PS3: yes.
FEATURES: glsl_min=120 core_only=n fallback=gl2 int_ops=opt bitwise=opt (clustered lighting only) texelFetch=no textureSize=no ubo=opt (postprocessing, GLSL>=330 only) instancing=no tex_arrays=opt (multiview/VR only) float_tex=opt (postprocessing: RGB16F normals) float_rt=opt rg_tex=no mrt=opt (postprocessing normals via glDisablei) vao=no sync=no geom=no tf=no compute=opt (clustered lighting) derivatives=opt (2 shaders, water/normal effects) textureLod_fs=no vertexid=no flat=no arb_fbo=opt (only with postprocessing/refraction/shadows; OSG uses EXT FBO) srgb_fb=no vtf=no dyn_loops=no (light loops are over a define-sized count; water has a 3x3 unrolled loop) big_shaders=maybe (per-pixel lighting object shader: 171 live lines, 8 point lights; UNVERIFIED against 32 temps) SCORES: popularity=5 novelty=5 playability_256MB=2 effort=L ppc64=builds (Debian-ports 0.51.0-1+b4 installed; also s390x) data=non-free (Morrowind ~1 GB; CC0 Template+Example Suite 160 MB) size_MB=1000
The detail (GL needs, the port, memory, CPU, big-endian, data, novelty and its sources) is in the game’s bundle: gamedb/games/morrowind/investigations/2026-10-19-gl3-census.md.
Barotrauma (MonoGame fork, .NET 8, repo pushed 2026-09)
Verdict: Skip. Not a GL problem (MonoGame DesktopGL needs OpenGL 2.0 plus ARB_framebuffer_object or
GL 3.0, per docs.monogame.net; UNVERIFIED for Barotrauma’s fork) but a runtime and licence problem:
LinuxClient.csproj targets net8.0 and ships x64-only native webm and Steamworks libraries; there is no
.NET 8 for ppc64 BE (Debian-ports has Mono 6.14.1 on ppc64, which cannot run net8.0 code). The source is
available under an EULA (not open source; README says read EULA.txt first), and the Content folder is not
in the repo, so the paid Steam game is needed.
FEATURES: glsl_min=? (MojoShader-translated GLSL, 1.10-class UNVERIFIED) core_only=n fallback=gl2 int_ops=? mrt=? arb_fbo=req
SCORES: popularity=4 novelty=5 playability_256MB=1 effort=XL
ppc64=n/a (needs .NET 8) data=non-free size_MB=3000
Novelty: not on PS3. Not worth it.
Godot 3 (3.6.2 source; Debian sid source 3.6.2+ds-1, ppc64 binary is old 3.2.3-stable-1+b2)
Verdict: Best find of the part. Godot 3’s GLES2 renderer runs on desktop GL 2.1 with an explicit EXT FBO fallback, auto-falls back from GLES3 to GLES2, and software-skins when there are no vertex textures, so the engine is already shaped for nv30. The risks are the huge uber-shaders, 150 MB of default 3D buffers, big- endian binary arrays, and that Debian ppc64 only has the stale 3.2.3 (sid’s 3.6.2 excludes ppc64: Architecture amd64 arm64 ppc64el riscv64), so we must build 3.6.2 ourselves. Many Godot 3 games exist.
FEATURES: glsl_min=120 core_only=n fallback=gles2 int_ops=no bitwise=no texelFetch=no textureSize=no ubo=no instancing=no tex_arrays=no float_tex=opt float_rt=opt rg_tex=no mrt=no vao=no sync=no geom=no tf=no compute=no derivatives=opt textureLod_fs=opt (macro falls back to texture2D with bias) vertexid=no flat=no arb_fbo=opt (EXT FBO fallback in code) srgb_fb=no vtf=opt (software skinning if 0 units) dyn_loops=opt (7 of 15 shaders have loops, dynamic_index in 7) big_shaders=req (57 KB fragment sources) SCORES: popularity=5 novelty=5 playability_256MB=3 effort=M ppc64=fails (3.6.2 not built on ppc64; 3.2.3 builds) data=free size_MB=34 (binary) + per game
1. GL needs (source + trace)
drivers/gles2/rasterizer_gles2.cpp:162-214: needs GL >= 2.1, and ARB_framebuffer_object or EXT_framebuffer_object (function pointers rebound to the EXT versions).platform/x11/os_x11.cpp:351-404tries GLES3-compatible first and falls back to GLES2;--video-driver GLES2forces it.rasterizer_storage_gles2.cpp:6334-6530: float textures optional (float_texture_supported), S3TC used, depth textures optional (else RGBA-packed shadows),support_write_depthoptional, 32-bit indices assumed on desktop, half-float vertices;use_skeleton_software = no float textures || max vertex texture units == 0(:6530): nv30 reports 0, so skeletons skin on the CPU automatically.shaders/scene.glsl:758-775: textureLod only if GL_EXT/ARB_shader_texture_lod exists, elsetexture2D(img, coord, lod)(bias). nv30 lacks it: reflection roughness lookups become biased, not blurred as designed. No derivatives needed in scene.glsl (grep found no dFdx).- Measured (godot3-runner 3.6.2 amd64, project: cube + sphere + plane, 1 directional + 1 omni light with
shadows, GLES2, 1920x1080, 15 s trace): context GLX compat, 15 shaders all
#version 120, extensions used only GL_ARB/EXT_shader_texture_lod, 33 draws per frame, ~990 GL calls per frame, 62 entry points, no GL3 buckets at all. Biggest fragment shader 57,075 chars (omni and directional shadow + lights ubershader), vertex 30,891 chars. Textures: 161 2D, 30 cube faces, 35 depth; internal formats RGBA, LUMINANCE_ALPHA, DEPTH_COMPONENT, RGB8. Whether the 57 KB fragment programs fit 4096 instructions / 32 temps is UNVERIFIED (needs the PS3); Godot hasforce_vertex_shadingand fewer-light variants as outs.
2. Port to nv30
Nothing to port for the engine; set rendering/quality/driver/driver_name="GLES2". Drop shadows or use
simple ones if the shader fails to link (nv30 keeps the previous program: “silently wrong”). Lost features
vs Godot 3 GLES3: no GI probes, SSAO/SSR, glow, DoF, bicubic lightmaps, many tonemap/HDR effects (GLES2 has
no HDR); 2D games are unaffected. 3D games with Environment effects look flatter.
3. Memory
Measured: empty 2D scene (one Label) 321 MB peak RSS at 1080p; 3D shadow scene 378 MB. Trace of the empty
2D project: 151 MB of textures uploaded at start (shadow atlas, cube/radiance map pools, depth, all created
even for a 2D game), 2.3 MB buffers. So PS3 estimate for an empty 2D project: 321 - 107 (llvmpipe) - 151
(GL textures, which live in VRAM) = ~65 MB + 10 Mesa nv30; the 151 MB of VRAM is the problem (VRAM is also
swap). Cuts: rendering/quality/shadow_atlas/size (default 4096), directional_shadow/size (4096),
reflections/atlas_size, reflections/roughness_layers; a 2D-only game can drop most to 1 or 64 and
reclaim ~140 MB. A 2D game on Godot 3 GLES2 is then a ~100-150 MB game: fits.
4. CPU
GDScript interpreter (slow, PPE-bound), 2D batching in GLES2 (canvas batching exists in 3.2+), physics on the main thread. Per-frame GL calls: 152 for an empty 2D scene, ~990 for the 3D test, driver cost applies. Software skinning in 3D skinned characters costs PPE (could use libspeq). 2D games at 60 fps plausible; 3D games hard.
5. ppc64 big-endian
- File format core is byte-wise little-endian:
core/os/file_access.cpp:164-210get_16/get_32/get_64assemble from bytes (endian-independent);.pckheader reads useget_32. - Binary resources carry arrays as raw memory with
#ifdef BIG_ENDIAN_ENABLEDswaps (core/io/resource_format_binary.cpp:416, 435, 468, 493, 518, 832, 1069;scene/2d/tile_map.cpp:1277). BIG_ENDIAN_ENABLED is defined nowhere in the SCons tree (grep of SConstruct, platform/x11/detect.py, core/SCsub), and Debian’s godot3 patches (Backport SCons env option, Namespace metadata, Fix recast flags) do not add it. So on BE, PoolIntArray, PoolRealArray, Vector arrays and the like read from binary.res/.scnwould be wrong. Fix: add-DBIG_ENDIAN_ENABLEDfor ppc64 BE in detect.py and test (S). Text.tscn/.tresand imported textures (.stex, raw bytes by format) are mostly fine; .stex of uncompressed formats and audio samples need checking. UNVERIFIED beyond the code read. - Debian-ports ppc64 has 3.2.3 only, and it will not open projects exported by 3.4-3.6. Build 3.6.2 with ppc64 added to Architecture. Upstream: ppc64le is a known arch, ppc32 was dropped (PR 106390 note); BE ppc64 untested upstream.
- Mono/C# builds are out (Thrive etc.); GDScript games only. Debian’s Mono 6.14 on ppc64 exists but the Godot 3 Mono glue wants a full Mono SDK and CoreCLR-era assemblies are not needed for 3.x; still skip.
6. Data and licence
Engine MIT. Games listed below carry their own licences. Exports are .pck; open-source games build from source
with the same Godot version.
7. Novelty
No Godot port to PS3 GameOS (Godot has no PS3 target). Godot games are novel there.
Godot 3 open-source games (checked project.godot config_version=4 means Godot 3, 2026-10-19)
| Game | Engine | Licence | Notes |
|---|---|---|---|
| Super Tux Party (gitlab.com/SuperTuxParty/SuperTuxParty) | Godot 3 (config_version 4), v1.0-rc 2022, GDScript | GPL-3 | 3D party game, Mario Party style; default driver GLES3, can force GLES2; 3D with shadows: heaviest |
| Haldric (wesnoth/haldric) | Godot 3.1+, dormant since 2022-10 | no spdx listed (Wesnoth org; UNVERIFIED) | official Wesnoth reimplementation WIP; 2D hex tiles; unfinished |
| TuxBuilder (Alzter/TuxBuilder) | Godot 3.2+, 2023-06 | GPL-3 | SuperTux level-editor-ish clone, 2D |
| Flappy Race (Jibby-Games) | Godot 3, pushed 2026-04 | MIT | 2D online multiplayer |
| Everplast (WraithWinterly) | Godot 3, pushed 2026-05 | other/unspec | 2D platformer, 457 MB repo |
| Pocket Broomball (dulvui) | Godot 3.2+ | AGPL-3 | 2D mobile game |
official godot-demo-projects 3.x branch |
Godot 3 | MIT | 2D/3D demos, good test cases |
| Not Godot 3 any more: Tanks of Freedom II (now config 5, Godot 4.4), Librerama (Godot 4.6). Thrive is Mono: | |||
| out. Best bets for the PS3: the 2D ones (Flappy Race, TuxBuilder, Everplast) and Super Tux Party if a | |||
| few shadows are dropped. None is a household name, so popularity of the whole item rests on the engine. | |||
| Cheap PC test done: the Debian godot3-runner 3.6.2 ran a hand-made GLES2 project (above); no full game | |||
| was run. |
Sources
src/godot3 (tag 3.6.2-stable, read-only); awesome-godot-3 list; project.godot files fetched from GitHub, GitLab, Codeberg; buildd.debian.org godot3 status; sources.debian.org patch list.
SDL3 GPU API and raylib
SDL3 GPU API: out. src/gpu/ in libsdl-org/SDL has only d3d12, metal, vulkan (and xr), no GL
backend (GitHub contents listing, 2026-10-19). A game written against SDL_GPU* cannot render on the RSX;
it would need a port to the SDL renderer or GL. Few notable open-source games use it yet: found jsoulier/blocks
(tiny Minecraft clone), vinisnthenorhim/SDL3-Project, FNA’s SDL_GPU work (UNVERIFIED); acoto87/war1 and
quetoo are tagged sdl3 but GPU use is UNVERIFIED. Verdict: nothing notable lost; skip.
raylib 6.0 (git 2026-10-18): src/rlgl.h:25-30, 152-158 supports GRAPHICS_API_OPENGL_11 | 21 | 33 | 43 | ES2 | ES3, default 33; CMake -DGRAPHICS=GRAPHICS_API_OPENGL_21 (or ES2) selects it, and 6.0 adds a
GRAPHICS_API_OPENGL_SOFTWARE backend. So raylib games are a rebuild against raylib built with
GRAPHICS_API_OPENGL_21 (Debian has libraylib-dev 6.0+ds-2 on ppc64, built for 3.3 presumably), not a port,
except games that ship their own #version 330 shaders (rewrite to 120/100). Notable raylib games are
small: raysan5/raylib-games jam titles, Waste of Space (C++, ENet rollback coop), ccleste-raylib, Wolf3D
clone, Asteroids Reimagined. None is a headline game. Effort S per game, value low.
Raylib’s big-endian status: UNVERIFIED (rlgl/stb use host-order texture data; stb_image handles files).
SCORES: popularity=2 novelty=4 playability_256MB=4 effort=S (per game)
Confirm-and-skip
- Veloren: out.
voxygen/Cargo.toml:69wgpu = { version = "27", features = ["spirv", "glsl"] }(Vulkan/Metal/DX12 plus an experimental GL3.3+ path); Rust, several GB RAM. Skip. - SuperTuxKart modern renderer: skip, we use the legacy one.
src/graphics/central_settings.cpp:104:m_glsl(the SP shader pipeline) needs GL >= 3.1 (non-GLES) or 3.0+ ES andm_supports_sp; below that the legacy fixed-function device is used (:107). What the legacy renderer loses (read incentral_settings.cppand settings, partly UNVERIFIED): the deferred pipelineisDeferredEnabled(dynamic lights, point lights from items), PBR materials and normal maps, cascaded shadows, SSAO/GI, bloom/glow post effects, DoF and motion blur, hardware skinning (kart skinning is on the CPU, as our docs say). It keeps the kart/track draw, fog, texture compression and simple blob shadows. Nothing important for gameplay. - Yamagi Quake II gl3/gles3: skip. Debian ships
ref_gl1(GL 1.4 fixed function, runs) andref_gl3(GL 3.2 core); gles3 same class. gamedb/games/yquake2/technical.md already says gl1 runs. gl3 adds coloured lighting and MSAA only.
Scan: other games that need GL 3+ (one line each)
| Game | GL need | Debian ppc64 | RAM | Verdict |
|---|---|---|---|---|
| Colobot (gold edition) | OpenGL 1.4 default engine; -graphics gl21/gl33 devices exist (shadows need them) (colobot.info forum) |
colobot 0.2.2-4+b2 | ~300 MB | GL2 already: runs on the 1.4 or gl21 device; worth a try |
| Oolite | GL 1.x/2.x, shader effects optional (UNVERIFIED) | not in sid | ~300 MB | GL2 already; needs a build, GNUstep |
| FreeOrion | GG engine; GL 2.1-class (UNVERIFIED version) | freeorion 0.5.1.2-1+b1 | 500 MB+ | probably GL2 already; heavy, Python AI |
| MegaGlest | GL 2.x, shaders optional | megaglest 3.13.0-10.1+b1 | 400 MB+ | GL2 already; heavy CPU RTS |
| Trigger Rally | PLIB / GL 1.x-2.x | trigger-rally 0.6.6.1-4+b1 | ~200 MB | GL2 already; cheap win |
| Luanti / ClassiCube / SuperTuxKart | GL 1.x / 2.1 | already run | covered | |
| Pioneer Space Sim | OpenGL core profile 3.1+ (Slackware READMEs) | not in sid | ~600 MB | GL3-blocked, no instancing/UBO fallback: not worth it |
| Rigs of Rods | Ogre 1.x GL3+ (GL 3.3, UNVERIFIED) | not in sid | 2 GB+ | out |
| Stunt Rally 3 | Ogre-Next, GL 3.3/Vulkan | not in sid | 2 GB+ | out |
| OpenSpades | GL renderer 2.0/3.0 class (wiki), also softgl software renderer, runs on llvmpipe with GL2 |
not in sid | ~400 MB | likely GL2 already or softgl; novel; worth a look |
| Speed Dreams | forge PR #3 “Reduce minimum required OpenGL version from 3.3.0 to 2.1.0” (title only, UNVERIFIED merged) | not in sid | 1 GB | maybe GL2 after that change; check |
| sm64ex / Render96 | RENDER_API=GL_LEGACY (GL 1.3) or GL 2.1, big-endian save support in README; ROM required (non-free assets) |
n/a | ~150 MB | GL2 already: strong candidate, N64 decomp is BE-friendly; needs the user’s ROM |
| Ship of Harkinian / 2Ship2Harkinian | libultraship Fast3D, gfx_opengl.cpp:306 #version 130 on Linux (GLSL 1.20-class code), ES #version 300 es |
n/a | 400 MB+ | near GL2: change to 120; C++20, ImGui, needs ROM, BE UNVERIFIED |
| Overgrowth | open-sourced engine, GL 3.2+ (UNVERIFIED), data not free | n/a | 2 GB+ | out |
| Cytopia | SDL2 renderer | n/a | not a GL item, abandoned | |
| Thrive, Space Station 14 | Godot Mono, .NET | no | out | |
| Barotrauma | see above | no | out |
Best finds: sm64ex (GL_LEGACY already, BE-aware), Colobot and Trigger Rally (already GL 1.4/2 and in Debian ppc64), OpenSpades (software or GL2), Ship of Harkinian (a GLSL version line away).
Cleanup note
Traces deleted; census reports kept under $B/work/godot/out/{census,c2}, $B/work/openmw/out/{census,census21};
containers openmw and godot removed.