GeDoSaTo shader development features, Dark Souls 2 SSAO improvements

I just pushed an update to GeDoSaTo which makes it significantly easier to work on shaders and effects (i.e. downsampling, SSAO, postprocessing). It’s now possible to bind a key for reloading shaders. The magic thing however, and what really saves time, is that if loading the new shader fails the old one will continue to be used instead, and the error will be reported:

screenshot_2014-08-23_14-58-34_0This really saves a lot of time restarting games. My workflow is now to have the game running in a window in the corner of the screen, and have Visual Studio take up the other half. This way, I can make changes to the shader and see the result in-game in about 3 seconds. It’s not a GUI, but it’s much more flexible and almost as fast in terms of iteration.

To prove the claim that this makes shader development much easier, I set out to improve GeDoSaTo’s SSAO. While better than the built-in monstrosity, this was never really high quality, particularly considering its performance impact. Well, it’s a whole lot better now:

_prev _curThat’s the old version on top and the new one in the bottom. Look in particular at the detail in the distance, the lack of pixelation on the grass, the much better definition on objects like the staircase and the lack of polygonal artifacts on the floor.

Now, you might ask “But Durante, the AO was already really heavy, can I really afford to run the new version performance-wise?”. The answer is yes, absolutely. For the result shown above, the previous version took around 9 ms of GPU time on my 770. The new one takes 4.8 ms.  If you’re keeping track, that’s almost twice as fast as previously. While also looking better, and sporting fewer artifacts.

You can get the new version right now with the updater.

Oh, one more thing. Since someone asked in a donation message: yes, I do read all the donation messages :P

GeDoSaTo User Setting Profiles

While automatic updating seems to work out fine now, it introduces an issue for everyone who is not me: you have to recreate/restore your settings and keybindings every time you update. This sucks.

Therefore, the latest version introduces user profiles for both settings and keybindings. What does this mean? User profiles allow you to store settings and/or keybindings in additional _user files, which do not get distributed with GeDoSaTo and therefore persist across updates.

The loading for settings files and keybindings now proceeds like this:

configSo global user configuration extends/overrides the default configuration, is in turn overridden by game-specific configuration if it is available, which is finally extended by user game-specific configuration. This should hopefully let everyone do exactly what they want.

And even though I hate writing UIs, I even made a nice UI for managing profiles and user profiles:

settings2The “U” button creates a user profile (or switches to it if it already exists), the “+” creates a new profile and the “-” deletes the current file (and cleans up the directory if it’s empty afterwards).

The filter allows you to filter profiles shown in the selection with substring matching, so e.g. “Risen” will only show you profiles for Risen. I think this will get more relevant now with more people contributing profiles.

If you enjoy this update and want to support me doing boring stuff like UI for your convenience, you can always donate here. And of course, you can get the most recent GeDoSaTo version either by using the built-in updater, or by installing it from here.

GeDoSaTo Distribution Changes Mark II

Sadly the new method didn’t really work out all that well for many people, so I made everything automatic and as foolproof/convenient as I can:

updaterPlease go to the new GeDoSaTo page to learn more.

GeDoSaTo should now be supremely easy to install and keep up to date for everyone!

In the future, I’ll do blog updates about GeDoSaTo whenever there is a new interesting feature, but without an accompanying release, as it should now be very easy for everyone to always get the latest version.

GeDoSaTo release/distribution changes

As you might have noticed, there was no GeDoSaTo release this last weekend, even though I kept up a biweekly release cycle previously.

The reason for this is that I switched to uploading binaries on GitHub.

What this means for you:

  • You can always get the very latest gedosato.dll and executable right here, as well as new config profiles etc.
  • If there is a regression (that is, something which was previously working stops to work), you can help with fixing it even if you cant compile GeDoSaTo, by determining exactly which commit broke it.
  • You need to take slightly more care to also e.g. get the updated configuration file when getting a new version which makes configuration changes.

What this means for me:

  • I have more time to work on GeDoSaTo, since packaging, uploading and documenting/posting about a release does take some time.
  • I get more immediate feedback on new features from people who follow development closely.
  • I get fewer donations, since I usually get one or two with every new release. Well, you can’t win them all.

The current version on Github as of this posting is 0.11.1162, and it has a plethora of new features and fixes over the last “regular” release:


  • Allow multiple downsampling resolutions to be available at the same time
  • Added support for multisampling while downsampling
  • Made the presentInterval setting work even when not downsampling
  • Can now bind Xinput buttons to actions
  • Added option to force presentation resolution regardless of request
  • Fixed Steam overlay rendering with alternative injection method
  • Fixed handling of GetDepthStencilSurface
  • Fixed crash bug with Steam Big Picture Mode
  • Hook d3d9 debug dll separately (restoring third party injector compatibility)


  • Unified injection methods (!)
  • Stop accumulating empty lines when sorting
  • Added event handling for unloading dll (related to Steam Big Picture Mode crash fix)

Mitsurugi Kamui Hikae Plugin:

  • Added plugin, has all functionality of the generic plugin
  • Plus can render game at arbitrary resolution (vanilla game is limited to 1080p)

I hope this works out, it seems like a much better solution.

By the way, as I said in the last post, if you do a bug report in the blog comments it will most likely be lost. Please report bugs/issues at GitHub where they can be centrally tracked and more conveniently discussed.

Edit: I realized that this won’t work out for everyone. Stay tuned for new information, hopefully tomorrow.