GeDoSaTo 0.16 Christmas Release

As a holiday special so to speak, today I’m releasing GeDoSaTo 0.16.

The TL;DR version of the updates is this:

  • Fixed a number of memory leaks which caused instability in pretty much all games. In some (most?) it was unnoticeable, but in Final Fantasy 13 and 13-2 crashes could occur as early as after 15 minutes of playtime.
    All of that should be fixed now.
  • As a result of that fix, if you are looking to find a PSHash or VSHash for a game (and only then!) you should enable the new trackShaders option.
  • I’ve also improved keybinding modifier support and borderless fullscreen support.

You can get the latest version with the installer provided here. And, as always, you can donate to support GeDoSaTo development here.

Happy holidays everyone!


The long version for those who are interested:

I’ve been chasing the sporadic crashing issues on and off since the release of FF13. For the longest while, I assumed that they had to be related to screenshot taking, as that was when they first and most often occured. I tried many things related to that (pre-allocating buffers, using the library in a way that causes no additional memory allocations, …) but it turns out that this was, more or less, useless, as I was looking in the entirely wrong place.

When I finally realized that, despite the issue only appearing in the FFs, it had to be a general memory leak in all of GeDoSaTo, I manually checked every single instance of new in the code for the corresponding delete . This was less work than it sounds since I try to write modern C++ where you very rarely call those directly. Over the course of this, I found a few issues, specifically  operator delete  being called instead of operator delete [] . However, since those were arrays of POD types, while bad practice and undefined behavior it wasn’t the issue I was looking for either.

Afterwards, I made a few abortive attempts to use existing leak checking tools, but like many tools designed to make programmer’s lives easier they are really hard or impossible to apply in the — very unusual, admittedly — interception use case of GeDoSaTo. It would certainly be a good idea to implement a stand-alone executable testbench at some point, but these things, they take time.

Yesterday, I finally made the breakthrough. My new approach was to fill the memory almost completely at start-up so as to more quickly reproduce the issue. Then, I got a repeated crash during loading in FF13-2. This reminded me of earlier studies of FF log files, and that it loads far more separate shaders than any other engine I’ve looked at, and some of them 3 times each. And it continues to do so heavily throughout the game, which is somewhat unusual. This lead me to looking at the shader management code, and there I finally found the culprit.

And, as is almost always the case, looking back after finding the bug it seems painfully obvious: to enable things like PSHash HuD rendering identification or injection of postprocessing or AO in the case of specific plugins, I keep a map of all shader pointers and their names (which are derived from their code so as to be reproducible across runs). However, I never remove entries from that map. As it is impossible to know when an entry is save to remove without fully instrumenting shaders (which seems like overkill for this purpose) I’ve solved the issue by adding the new  trackShaders  option. If it is not set (the default), shaders will still be identified if they were set as PSHashes or VSHashes, but only those will be tracked. The only reason to enable the flag is to look for a new hash in a new game.

6 thoughts on “GeDoSaTo 0.16 Christmas Release

  1. How do I configure Gedosato to allow the game to operate various features the way that the game wants them to operate, except for the few things I want to tweak? Currently I can set tweaks to either enable a setting or disable a setting but there is no option to not override the behaviour set by the game.


    For example: I can’t tell Gedosato to use the same scaling method that the game requests, I’m forced to override it if I use your program.

  2. With recent revisions, I’m getting problems with lanczos scaling. All other scalings work fine, but lanczos is resulting in a pure white screen. I’ve only tested with Dark Souls II so far, but the issue seems independent of other settings.

  3. Hey Peter, is there a way to make DS2 Bloom plugin to work with other games, or it needs an individual coding for every different game?

    BTW, thank you for the updates!

  4. You do good work :D

    In noticed sometime ago that i cant close gedosato. the gui closes but the task is still active and i cant kill it. I need to restart my pc after i use gedosato so that it is closed.

  5. Great work as always and Happy Xmas!

    I noticed an issue with FFXIII with Gedosato’s latest update I think.

    If leaving the launcher res @720p, and downsampling from 4k to 1200p with Gedosato, Lightning’s hair is off, full of jaggies etc. Other textures seem ok though.

    The reason I mention this, is that there is currently a bug with FFXIII regarding enemy information at higher than 720p, so using Gedosato was previously the only way to get around that.

    • With the latest version you can’t downsample while leaving the launcher resolution at 720p. I wasn’t aware that the game setting has issues.

      Anyway, what you are describing sound like you are forcing 0 MSAA, either with GeDoSaTo or at the driver level. Don’t do that.

Leave a Reply

Your email address will not be published. Required fields are marked *

You may use these HTML tags and attributes: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">