Changes in this build
Experimental build. It is not offered as an update: download the zip from this release, or pick this version in the launcher on the Testing channel. It holds the performance work for the Steam Deck on top of 0.10.3. After installing it, press Set up again once: it rebuilds the game code with the new translation, several minutes. Your shaders and saves are kept; no shader is translated again. Please report anything that looks or plays differently from 0.10.3, with pkp.log
Performance (measured on a Steam Deck OLED, in the world, vsync off)
- Higher and steadier frame rate: about 52 fps where the build before this work gave about 44, and the slowest frames are shorter (the slowest 1 % took about 26 ms, before about 38 ms)
- The graphics work of a frame now reaches the GPU in pieces while the rest is still being prepared, so the GPU starts several milliseconds earlier in each frame (Steam Deck and other Linux handhelds)
- Less processor time spent by the game's helper threads while you play: fewer wake-ups, the driver's shader cache is written at most every 30 seconds, and a guard that could do nothing under Proton no longer runs there
- Shorter waits between the game's own threads on Linux handhelds: short sleeps end on time, and a wait ends as soon as what it waits for has happened
- Fewer redundant copies of graphics memory and less repeated work for each draw
- The game's own code is translated to leaner machine code: the game's registers and condition flags now live in processor registers instead of memory wherever no other code can look at them. This is the change that needs Set up again
Frame pacing
- Fixed uneven frames with a frame limit: now and then one frame waited twice for the limiter and the next one not at all
- New, off by default: vblank lock for a frame limit of half the screen's refresh rate with vsync on, for example 45 fps on the Steam Deck OLED's 90 Hz screen. Every frame is then shown for the same number of refreshes instead of an occasional long frame followed by a short one. To try it: set vsync on and the frame limit to 45, then add
vblank_lock = 1under[latency]inpkp.ini - On a Windows PC the frame rate is the same as in 0.10.3
For testers
- The new translation of the game code cannot be switched off in
pkp.ini. To compare, set the environment variablePKP_LOCALS=offand press Set up again: that builds the game code the way 0.10.3 does - New lines in
pkp.logevery 10 seconds:tcpu(processor time by thread) and, withpresent_stats = 1under[latency],pacing: present timing(how many refreshes each frame was shown for) - If something breaks, these switches in
pkp.inibring back the earlier behaviour one at a time, which helps to find the cause:gpu_split_ms = 0andpool_reg_skip_same = falseunder[nvn],poll_wait = false,short_sleep = sleepandearly_wake = offunder[kernel],boundary_count = renderunder[latency]
How to report
Open a bug report, choose Testing as the channel, say which version you have, and attach pkp.log (and setup.log if Set up ran). Thank you for testing.