Technical notes ยท Research

Part E: id Tech 4, the Doom source ports, FreeSpace 2 Open

The agent for this part stopped at the usage limit after its measurements; the coordinator wrote the part from its saved runs ($B/traces/dhewm3, $B/traces/gzdoom) and from the clones it left ($B/src/{dhewm3,gzdoom,tdm,fs2open.github.com,doomsday}). Clone dates: dhewm3 455b88e 2026-06-08, GZDoom c26ce2e 2026-08-10, fs2open 2026-10-18.

dhewm3 (Doom 3 GPL engine, 1.5.5 / git 455b88e)

Verdict: not GL3-blocked. It renders with GL 1.x fixed function plus ARB_vertex_program / ARB_fragment_program, which nv30 exposes; big-endian is a first-class build option. The blocker is memory: the free Doom 3 demo’s first map peaked at 1161 MB on the PC. Effort M (our ppc64 build, texture downsizing and compression, memory cuts), playable only if those cuts land. FEATURES: glsl_min=none (ARB assembly) core_only=n fallback=gl1 int_ops=no bitwise=no texelFetch=no textureSize=no ubo=no instancing=no tex_arrays=no float_tex=no float_rt=no rg_tex=no mrt=1 vao=no sync=no geom=no tf=no compute=no derivatives=no textureLod_fs=no vertexid=no flat=no arb_fbo=no srgb_fb=no vtf=no dyn_loops=no big_shaders=no (ARB programs written for NV30/R300-class cards) SCORES: popularity=4 novelty=3 playability_256MB=2 effort=M ppc64=not-in-debian (contrib, arch any: our build) data=non-free (free demo, 462 MB) size_MB=462 (demo) / ~1500 (retail)

The detail (GL needs, the port, memory, CPU, big-endian, data, novelty and its sources) is in the game’s bundle: gamedb/games/doom-3/investigations/2026-10-19-gl3-census.md.

RBDOOM-3-BFG

Out: since 1.4 it renders through NVRHI (Vulkan or D3D12; the GL backend was removed). Doom 3 BFG was an official PS3 release anyway. No entry needed beyond this line. SCORES: popularity=3 novelty=1 playability_256MB=1 effort=XL ppc64=n/a data=non-free

The Dark Mod (2.13-era source)

Verdict: out. GLimp_CheckRequiredFeatures demands GL_VERSION_3_3 and S3TC and errors otherwise (renderer/backend/qgl/qgl.cpp:71-80); the renderer is GLSL 330+ with uniform blocks and multi-draw paths (from its docs; UNVERIFIED line by line), the data is several GB and its system requirements start at 4 GB RAM (UNVERIFIED). A GL 2 port would be a rewrite of the 2.08+ renderer; the last GL 2-class release (pre-2.06) would still need 1+ GB. FEATURES: glsl_min=330 core_only=y fallback=none ubo=req (est) others ? SCORES: popularity=3 novelty=5 playability_256MB=1 effort=XL ppc64=not-in-debian data=free (CC-BY-NC-SA) size_MB=~5000 (est)

GZDoom 4.14 (and Raze, same backend)

Verdict: not GL3-blocked. GZDoom ships a GLES 2 backend that has an explicit desktop-GL-below-3.3 mode with GLSL 100 shaders; it needs one texture-format fix for nv30 and our ppc64 build. The cost is the CPU: ZScript runs in an interpreter off x86_64. Effort M. Popular because of its mods, but Doom itself is already on the PS3 (dsda-doom here, PrBoom on GameOS). FEATURES: glsl_min=100 core_only=n fallback=gles2 (desktop GL 2.0 compat context) int_ops=no bitwise=no texelFetch=no textureSize=no (commented out, present.fp:23) ubo=no (uniform arrays) instancing=no tex_arrays=no float_tex=no float_rt=no rg_tex=req (GL_RED, patchable) mrt=1 vao=? sync=opt geom=no tf=no compute=no derivatives=no textureLod_fs=no vertexid=no flat=no arb_fbo=no srgb_fb=no vtf=no dyn_loops=? (up to 32 lights per surface, gles_max_lights_per_surface) big_shaders=? (one uber-shader with variants) SCORES: popularity=5 novelty=2 playability_256MB=4 (vanilla maps) effort=M ppc64=not-in-debian data=free (Freedoom) size_MB=~30 engine + IWAD

The detail (GL needs, the port, memory, CPU, big-endian, data, novelty and its sources) is in the game’s bundle: gamedb/games/gzdoom/investigations/2026-10-19-gl3-census.md.

FreeSpace 2 Open (fs2open master 2026-10-18)

Verdict: GL3-blocked hard. The current renderer requires GL 3.2 core and GLSL 150, samples every texture as sampler2DArray, and keeps its uniforms in uniform blocks. A port of master is XL. The realistic route is an old release with the GL 2 / fixed-function renderer (3.7.4, 2016) and retail or freeware data: M, with modern mods lost. FEATURES (master): glsl_min=150 core_only=y fallback=none int_ops=? bitwise=? texelFetch=req (5 shaders) textureSize=req ubo=req (46 shader files with uniform blocks) instancing=req (gropengldraw.cpp:1262, gropengltnl.cpp:668) tex_arrays=req (36 uses, every material shader) float_tex=opt float_rt=opt (deferred, HDR) rg_tex=? mrt=req for deferred (opt) vao=req sync=opt geom=opt (effect-g, main-g, shadow_map-g; behind -no_geo_effects) tf=no compute=no derivatives=? textureLod_fs=? vertexid=? flat=? arb_fbo=req srgb_fb=? vtf=no dyn_loops=req (lighting loops) big_shaders=req SCORES: popularity=4 novelty=5 playability_256MB=3 (retail data, old engine) effort=XL (master) / M (3.7.4) ppc64=not-in-debian data=non-free retail; free TCs (The Babylon Project, Wing Commander Saga, Diaspora) size_MB=~600-2000

The detail (GL needs, the port, memory, CPU, big-endian, data, novelty and its sources) is in the game’s bundle: gamedb/games/freespace-2/investigations/2026-10-19-gl3-census.md.

Doomsday 2.3.1 (debian-ports ppc64 has 2.3.1+ds1-2)

GL 3.3 core by default, with a build switch DE_OPENGL_API = 3.3 / GLES3 / GLES2 (doomsday/libs/gui/CMakeLists.txt:10-58; core profile requested at glwindow.cpp:73-75). A GLES2 build is the cheap route if its GLES2 code still compiles (UNVERIFIED, it may only be maintained for GLES3). Low priority: dsda-doom already plays Doom, Heretic and Hexen on the PS3, and Doomsday is Qt-heavy (RAM). SCORES: popularity=2 novelty=2 playability_256MB=2 effort=M ppc64=builds data=free (Freedoom).

Sources

  • $B/traces/dhewm3/{tr,map1,run2}.mem.txt, census/report.md, map1.out.log (dhewm3 1.5.5 from Debian amd64 contrib, demo00.pk4); $B/traces/gzdoom/gles.mem.txt (gzdoom_4.14.2_amd64.deb).
  • dhewm3 455b88e: neo/CMakeLists.txt, neo/idlib/Lib.cpp, neo/idlib/math/Simd.cpp, Simd_AltiVec.cpp, Changelog.md. Debian sid-contrib Sources (dhewm3 1.5.5+dfsg-2, arch any).
  • GZDoom c26ce2e: src/common/rendering/gles/{gles_system,gles_hwtexture,gles_buffers, gles_renderbuffers,gles_postprocess}.cpp, wadsrc/static/shaders_gles, sdlglvideo.cpp, CMakeLists.txt, src/common/utility/m_swap.h.
  • fs2open master: code/graphics/opengl/{gropengl,gropengltnl,gropengldraw,gropengldeferred, gropenglpostprocessing}.cpp, code/def_files/data/effects/*.sdr, code/globalincs/pstypes.h.
  • The Dark Mod: renderer/backend/qgl/qgl.cpp. Doomsday: libs/gui/CMakeLists.txt, glwindow.cpp.