The game is very slow!
Using an OpenGL software driver makes the game run very slowly, but it is necessary for being able to use savestates. Indeed, if we use hardware acceleration, we cannot save the state of the GPU inside savestates, so loading savestates often results in a crash. Nethertheless, fast-forward skips most OpenGL rendering functions, so you should get a decent framerate with fast-forward enabled.
Why did my savestates disappear after I restart the game?
Savestates are invalid after restarting the game, because part of the game state is different at each execution. This includes memory layout, processes/threads identifiers, file identifiers, and in general any communication protocol to the outside (X server connection, sockets, etc.). It may be possible to get savestates valid upon game restart, but it would require a lot of work and I don't feel it is worth right now.
The game softlocks at startup/after a short time
They are many reasons why a game would softlock when launching with the tool, but many games softlock because they are waiting in a loop for time to advance (without drawing or sleeping). The best way to check this is to set
Runtime > Debug > Uncontrolled timebefore starting the game. It will disable the deterministic timer and will let the game access to real time. If the game does not softlock anymore, then we are likely witnessing this scenario. However, we cannot keep this setting because it makes input recording/playback highly non-deterministic.
There is a setting which tries to overcome this softlock, under menu
Runtime > time tracking. Basically, it increases the time when a specific function, that asks for current time, has been called a certain number of times. Either you find the right function to check, starting by
main thread, by trial-and-error until the game does not softlock anymore, or you can look at the debug log by enabling
Runtime > Debug Logging > Print Categories > Time Get, and see which function is continuously called by the game.
Checking an item under
Runtime > time tracking > main threadaffects sync, but it won't lower the determinism of the game execution. Checking an item under
Runtime > time tracking > secondary thread, however, may make the game non-deterministic.
If this doesn't solve the softlock, then you gather information about it as explained below
How do I report a crash/softlock/problem?
You can open an issue with the following information:
- Which game did you use? Which version? Steam or DRM-free?
- Which version or commit number of libTAS?
- What happens?
- Does libTAS reports errors on the console?
- Does the game reports something on the console?
- If you encounter a crash or a softlock, can you launch the game with
Start and attach gdb, and reach that point. Then on the console you should have a gdb prompt "
(gdb)" if the game crashed, or press
Ctrl-Cif the game softlocked to get one. Then enter
"thread apply all bt"and paste the result in the github issue.