O projeto

O jogo, recompilado

O Ascension traduz o código do jogo para C++ e o compila para o seu PC. Não é um emulador: é o próprio jogo, recompilado, sobre o runtime do ps3recomp.

O processador principal

O código do PPU do jogo vira C++ e é compilado para o seu processador.

As SPUs

Os programas das seis SPUs também são traduzidos; os mais pesados foram reescritos em código nativo, conferido contra o original.

O vídeo

Os comandos de vídeo vão para o renderizador do RPCS3 (Vulkan ou OpenGL); um renderizador próprio está em desenvolvimento.

O desempenho

Um plano aberto, medido passo a passo: o objetivo é rodar bem em processadores comuns, não só nos mais fortes.

Onde estamos

Do começo ao fim: o iSamigor zerou o jogo no PC dele (Ryzen 7 9800X3D, RX 9070 XT). Em processadores comuns ainda é lento e pode travar. Números do README do repositório, de 05 nov 2026.

Primeiro nível num Ryzen 7 5700G, medido no Windows na mesma cena.
OndeComeço de novembroHojeRPCS3
Primeiro nível, PC inteiro (8 núcleos, 16 threads)~21-23 fps~24 fps35-40 fps
Primeiro nível, só 4 núcleos (8 threads)~14-15 fps~17-18 fps
Menu principal~50-55 fps~50-55 fps
Luta contra o chefe13-21 fpsainda não medida de novo

O que rendeu em novembro

  • Código do processador principal compilado com perfil de uso real do jogo (PGO): ~10% a menos no tempo do quadro.
  • Thread principal do jogo com prioridade acima do normal: -2,7 ms por quadro.
  • Jobs do fim do quadro espalhados por até 4-5 SPUs: -2,1 ms por quadro.
  • O thread do RSX dorme com a fila vazia em vez de girar (~8%) e as SPUs escolhem sozinhas o próximo trabalho (~1,6%).
  • Mais da geometria das SPUs (o EDGE) em código nativo, conferida contra o original: o job mais pesado ficou 28% mais rápido.

O RSX saiu do caminho crítico: a espera entre as duas passadas da geometria caiu de 9-12 ms para ~0,1 ms. Hoje ~55% do quadro é o EDGE (o módulo de geometria das SPUs), e dentro dele as interrupções do gerenciador de jobs custam tanto quanto o código dos próprios jobs: é o próximo alvo.

Estabilidade

  • CorrigidoO travamento no nível com as listas de geometria esperando para sempre (de 3 em 5 rodadas para nenhum em 4).
  • CorrigidoO travamento com CopyLocalMemory offset error: nenhum em 40 rodadas no nível.
  • ProtegidoComandos de vídeo corrompidos não derrubam mais o RSX; a causa ainda está aberta.
  • AbertoUm objeto desenhado várias vezes perto do braço gigante; o travamento BATCHJOB; um crash raro ~70-105 s depois de entrar no nível.

Marcos

O que o jogo passou a fazer, e quando. Do MILESTONES.md do repositório (em inglês).

  1. 05 nov 2026

    Multiplayer: quick match gets past the player's location and picks its matchmaking server on the project's own server; the game connects and opens an SSL 3.0 session, which the server is learning to answer.

  2. 05 nov 2026

    The RSX off the critical path: its wait between EDGE's two geometry passes went from 9-12 ms to ~0.1 ms. The first level runs at ~24 fps on the whole PC and ~17-18 on 4 cores (was ~14-15); the frame is now ~55% SPU module 218, where the job manager's interrupts cost as much as the jobs' own code.

  3. 05 nov 2026

    The `CopyLocalMemory offset error` freeze fixed: an Edge Zlib counter, and a guard on the texture streaming table's hand-off. None in 40 level runs on 4 cores.

  4. 04 nov 2026

    Two more defaults, each measured in-run on a 4-core PC: the game's main thread above normal priority (-2.7 ms a frame) and the frame's tail jobs spread over up to 4-5 SPUs (-2.1 ms). The main processor's code built with profile-guided optimization (PGO): ~10% shorter frames.

  5. 04 nov 2026

    Multiplayer reaches the warrior lobby with the project's own server (in development, still private); the player's multiplayer profile is kept on their account. Online matches do not work yet.

  6. 04 nov 2026

    Runs on macOS again (Apple Silicon, RPCS3's RSX), for testing: the RSX thread now recovers from corrupted command data instead of stopping the game.

  7. 04 nov 2026

    The first level's frame measured part by part: of ~50 ms, ~21 ms are the SPUs' geometry lists (EDGE) and ~9-12 ms the wait for the RSX thread between that geometry's two passes.

  8. 03 nov 2026

    The intermittent level freeze found and fixed: a store from the main processor could be lost in the middle of an SPU's atomic operation, leaving the geometry lists waiting forever. The repro went from 3 freezes in 5 runs to none in 4.

  9. 03 nov 2026

    Measured on Windows against RPCS3 in the same first-level scene: 22 fps native, 35-40 on RPCS3. Two changes become the default: the RSX thread sleeps on an empty command queue instead of spinning (~8% shorter frames on a 4-core PC), and the SPUs pick their next work themselves (~1.6% shorter on the same PC).

  10. 23 out 2026

    First boss fight reached (13-21 fps while fighting). The profile there shows the SPU time spread over many small pieces, so the next work goes after costs every SPU job pays, not one function at a time.

  11. 23 out 2026

    The frame's edge-smoothing post-process runs natively: its four heaviest SPU stages rewritten in C, identical to the original on 12 million checked calls; that work costs about half.

  12. 23 out 2026

    Level ~17.5 → ~22 fps: lifted SPU code built for AVX2, lighter SPU runtime.

  13. 23 out 2026

    Launcher Video → Effects: depth of field, motion blur and MLAA can be turned off (the same patches RPCS3 offers, found in the 1.00 disc). Experimental: textures still glitch with them off.

  14. 23 out 2026

    More SPU code that was still being interpreted is now recompiled, and two streamed pieces of the geometry job run natively.

  15. 22 out 2026

    Level ~15 → ~17.5 fps: the main processor's recompiled code keeps the game's registers in local variables instead of memory (re-lifted; 1.5-1.8x on isolated functions).

  16. 21 out 2026

    SPU job replay: recorded game jobs rerun outside the game and checked byte for byte by what they write, with timing and profiling. Module 218 (per-draw geometry) decoded: index decompression and position transform written natively, identical on the recorded jobs; the rest of the job goes native next.

  17. 21 out 2026

    Level ~15 → ~16.7 fps: each SPU on its own core, the main PPU thread on core 0.

  18. 20 out 2026

    Level ~10 → ~15 fps: lifted SPU floats without the extended-range check (RPCS3's "approximate" rules), no local-store diagnostics in lifted code, contiguous job-module code lifted as one function, streamed code found by an index.

  19. 19 out 2026

    Level textures correct: IO space handed back on unmap, so the scenery's vertex streams no longer read the command buffer.

  20. 19 out 2026

    Main menu 12 → 28 fps on RPCS3's RSX: SPU transfers into surfaces the GPU protected were being dropped.

  21. 19 out 2026

    RPCS3's RSX as the renderer (Windows and macOS): the game's GPU/SPU post-process rounds paced on the game's own progress.

  22. 18 out 2026

    The first level (Kratos in chains): a lost-task race in the SPURS taskset scheduler fixed; the level loads and runs (~16 fps on live draw).

  23. 17 out 2026

    Brazilian Portuguese (voices from the US disc, text already on the EU disc); mods as recipes, Skip intro included.

  24. 17 out 2026

    Main menu 1 -> 12 fps: the 18 job modules the loading never streams lifted too (33 in all), streamed code found inside bigger GETs and by content.

  25. 17 out 2026

    A launcher: video, language, subtitles and mods; the game renders inside its window.

  26. 17 out 2026

    The main menu renders (about 1 fps).

  27. 17 out 2026

    The cinematic at full speed and in sync (29.98 fps), the end-of-loading stall gone, module 214 lifted whole (GPU reports wait for the post-process tasks, no lost task wakes, cellVdec holds AUs).

  28. 17 out 2026

    RsxSync woken by GPU reports, SSE4.1 SPU ops, 381 job-module entries, the interpreter honouring interrupt enables. Cinematic video at 72-90% speed.

  29. 17 out 2026

    Performance, part two: position-independent lifts of streamed job code, SSE4.1 for lifted SPU code. Menus ~10 → 26-55 fps, cinematic ~35 → 45-60 fps.

  30. 17 out 2026

    Performance: the 15 Wws job modules lifted, a performance panel. First-use menus 5-6 → ~10 fps.

  31. 17 out 2026

    The opening cinematic plays with picture and sound (cellVdec with FFmpeg at run time; the "black screen" was the game's fade card waiting for it).

  32. 16 out 2026

    The menus read: X16 font atlas, framebuffer sRGB and texture gamma, fragment DDX/DDY in the live draw engine.

  33. 16 out 2026

    Past the loading screen (SPURS tasksets: duplicate starts, Taskset2 size and event flags, SPU-created tasks).

  34. 16 out 2026

    Re-lifted with the v0.15 lifter (a spill-reload bug corrupted a heap at frame ~12): the loading screen.

  35. 16 out 2026

    The main renderer runs past its second frame: SPURS2 (32 workloads, tempArea, flags1), the frame's SPU post-process, GPU/SPU synchronization.

  36. 15 out 2026

    The intro screens render: the legal text, "Sony Computer Entertainment presents", Santa Monica Studio, the online-play notice (live draw engine). The same on macOS through Metal.

  37. 15 out 2026

    Boots through the system checks and mounts the game's archives (sys_lwcond_t layout, files past 2 GB, Edge Zlib on the host).

  38. 15 out 2026

    EBOOT.BIN decrypted, imports and functions found, 1.8 million lines of C++ lifted and compiled; the executable starts.

Créditos

ps3recomp
sp00nznet e colaboradores: o recompilador, o runtime e as bibliotecas de sistema.
RPCS3
o código do RSX usado como renderizador (GPL-2.0).
iSamigor
testes num segundo PC, correções no runtime e o primeiro a zerar o jogo.
Cinzel
a fonte dos títulos (SIL Open Font License).