reSOT v0.4.4
A big performance release. The direct renderer is now on by default on every
renderer, most of the retail game's drawing skips the old Xbox command
interpreter, and the game and the renderer now work in parallel.
On the test PC (Windows, retail, Vulkan, RTX 3060, 225% internal resolution),
in a heavy scene of about 1,600 draws a frame:
- about 64 fps before this release, about 143 fps now
- an empty view runs at about 700 fps
Windows demo and retail executables and the Android APK are version 0.4.4
(Android versionCode 14). As always, you need your own supported Xbox game files.
Performance
- Direct renderer on by default, on every renderer. Direct3D 11, Direct3D 12,
Vulkan and Android. The games' Direct3D routines hand reSOT's renderer the draws
and state directly, instead of Xbox GPU commands that had to be decoded first.
SetRESOT_DIRECT_DRAW=0to go back to the old path. - Retail level geometry drawn directly. About two thirds of the retail game's
draws came from command buffers it records once and replays every frame. reSOT
now keeps them, checks them against the game's copy each time, and reuses
the geometry already on the GPU. Renderer time in the heavy scene went from
8.95 to 6.2 ms a frame. - Game and renderer in parallel (retail). The game can prepare the next frames
while the previous ones are drawn: up to 32 submissions and at most two frames
ahead (RESOT_KICK_AHEAD,RESOT_FLIP_AHEAD). - Faster presentation on Vulkan. The display mode is no longer queried every
frame; on NVIDIA this took about 13% of the renderer's time. - Faster memory checks (Windows). reSOT's own per-frame checks of game objects
no longer ask Windows about the memory first (about 10% of the game thread in
heavy scenes, 28% in menus). - Smaller CPU savings: faster vertex conversion and geometry caching, and the
retail matrix multiply in native code (9% of the game thread down to 0.9%).
Fixes
- Light halos turning green or flashing white (retail). At a raised internal
resolution the two tiny probes behind each light halo could count a different
number of pixels, pushing the halo's brightness out of range. It now stays
within range.
Launchers
- The game language is now chosen in reSOT Options only. The Windows and
Android launchers no longer show the "Game language" button. Use the Language
page of reSOT Options (retail); the choice is still saved inresot-options.ini
and applies at the next start.
Known limits
- Android was built but not yet tested with this release.
- The demo gets the direct renderer, but keeps waiting for the renderer at every
submission. - Direct3D 11 and Direct3D 12 have not been re-tested with the last changes.
- The halo fix and the hidden launcher button have not been confirmed in game yet.
- The two-frame limit was tested for about 33,000 frames. If parts of a level
turn black after a long session, setRESOT_FLIP_AHEAD=1: slower, but it
prevents it. - In the retail Magic Fountain teleport the fade to black does not appear and the
camera stays at the bridge entrance until the view is changed.