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:
So 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:
The “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.
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:
Please 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.
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.
Two weeks have passed, time for another release. Lots of fixes and additions in this one, and also many new profiles. My article seems to have worked to at least some extent, it’s great to see pull requests popping up on GitHub (even if most are not code).
- Added feature to disable HUD (in games with a targeted injection profile)
- Added keybinding to toggle through scaling methods
- Added option to prevent Steam Overlay loading (thanks GoaLitiuM)
- Added “loadD3DEarly” compatibility option
- Now possible to list and query readable app name from whitelist
- Fixed downsampling with more than 3 levels
- Fixed stupid typo preventing games with backbuffer formats other than the default from working correctly (thanks Boulotaur2024)
- Fixed crash when framedumping, store framedumps as TGA, create folders for each
- Fixed crash with special characters in blacklist/whitelist entries
- Fixed “interceptOnlySystemDlls” with nonstandard system paths
- Can now sort black/whitelists
- Fixed working directory when launched at windows startup
- Generic Plugin:
- Show exe name and (if available) readable name in status display
- Added option to target screenshots/postprocessing to specific renderstate changes (“injectRenderstate [state],[value]” — example of use in Ys Origin profile)
- Added lots of profiles, thanks to all the contributors
Download GeDoSaTo 0.10 “Poltergeist” here. And if you just found out about GeDoSaTo or have been using it for a while and want to encourage further work on it donations are always welcome.
One more thing: if you want to report bugs or request features, please do so at github. It’s much easier to follow, manage and discuss such things there than in the blog comments!
I wrote a new article for PC gamer about the GeDoSaTo processing/screenshot taking function. It gives detailed instructions on how to create game profiles. Have a look, create a profile for your favourite game and contribute it!
This is mostly a bug-fixing and compatibility release, while under the hood changes continue to get ready for broader API support (which, before you ask, is a lot of work and will still take a while).
- Added nearest neighbour scaling option (this is intended to be used for upscampling in retro games, not downsampling)
- Added “interceptOnlySystemDlls” option to potentially increase compatibility with 3rd party injectors
- Fixed enum ordering in the scaler (should *really* fix Mafia 2)
- Fixed overlays/console not rendering in some games
- Fixed normal resolution screenshot regression introduced in beta 8
- Fixed initialization for games which use automatic depth/stencil generation (e.g. Witcher 1)
- Fixed initial render state settings
- Added option to launch at windows startup
- Added command line option for launching minimized
- Check for and resolve leftover registry entries on startup
- Generic Plugin:
- Extended postprocessing/screenshot targeting functionality (can now delay to first draw after marked pixel shader is set)
Basically, this release further improves compatibility, fixes some bugs and increases the functionality of the generic plugin. It also adds some requested useability features to GeDoSaToTool.
Download GeDoSaTo 0.9 “Underground Network” here, and if you want to encourage further work on GeDoSaTo donations are welcome.
There are even more options which can be configured per-game now, so if you find some compatibility settings (or good postprocessing options) for a given game please contribute on github.
Edit: Oh, and yes, Chrome is probably still falsely flagging GeDoSaTo. Take it up with Google, their processes for trying to get this fixed are stupid.
This release comes with a Smörgåsbord of feature additions to both GeDoSaTo itself and the tool. It also increases game compatibility greatly, adds a high-quality Lanczos downsampling option, and massively increases screenshot performance.
- Added ability to have per-game postprocessing shaders
- Added the “forceAlwaysDownsamplingRes” option (can be used to make reluctant games – like Divinity:OS – show downsampling resolutions)
- Added Lanczos downsampling filter option
- Changed default screenshots to also capture GeDoSaTo overlays
- Made screenshot-taking asynchronous (basically 0 performance hit for the first SS)
- Restored neutral render state before downsampling [Boulotaur2024]
- Refactored rendertarget management (to easier turn API agnostic later)
- Implemented alternative dll injection strategy (for games which build the
D3D device before doing anything which would be caught by the default)
- Prevented multiple instances of GeDoSaToTool being started
- Added startup checks for path validity and admin rights
- Added basic editors for postprocessing shaders
The combination of the new injection method and improvements in GeDoSaTo now allows games like Divinity: Original Sin (which is a fantastic game releasing tomorrow which you should buy, btw.), Witcher 2 and Mafia 2 to work with Downsampling.
Download GeDoSaTo 0.8 “Rapidity is a justice” here, and I always appreciate any donations made here.
There are a lot of options which can be configured per-game now, so if you find some compatibility settings (or good postprocessing options) for a given game please contribute on github. Of course, more in-depth code contributions are also very welcome!
Once again, GeDoSaTo is not a virus or whatever else your misguided browser/scanner heuristic wants to label it as. It just does a lot of pretty wild stuff. If you don’t believe me, compile your own from Github, all the source is up there
If the alternative injection method is not working for you, you might have to set the registry value “LoadAppInit_DLLs” in the key “HKEY_LOCAL_MACHINE\SOFTWARE\Wow6432Node\Microsoft\Windows NT\CurrentVersion\Windows” to “1″. Beta 9 will do this automatically.
The first release after open-sourcing the project! There haven’t been any source contributions yet, but at least one person gave me some pointers to issues which need investigation.
I’m very happy with this release, particularly since I managed to fix the alt-tabbing crash bug which has been in GeDoSaTo since day 1 (read more here). But there are lots of other improvements as well, see below.
- Fixed Alt-tab crash when downsampling in fullscreen mode (!)
- Added IDirect3DSwapChain9 interception (fixes compatibility with some games, e.g. Dragon Age Origins)
- Screenshot fallback to full-size if hudless not available
- Fixed Z/stencil buffer format detection (fixes e.g. GTA4)
- Improved handling of automatically generated z/stencil buffers (don’t duplicate, we don’t need an original-res depth buffer when downsampling)
- Generic Plugin:
- Store screenshots after AA/postprocessing, not before
- Only use float BB if required (should improve AA/post performance on most games)
- Added ability to specify a “marker” pixel shader in the configuration, in order to apply AA/postprocessing before HUD rendering and capture hudless screenshots
- Added ability to edit game profiles using the built-in editor (still need to be created externally)
I guess I will need to create a guide for the new pixel shader marker functionality in the generic plugin. Its goal is to allow everyone to enable postprocessing without affecting the UI and hudless screenshots for every game, simply by editing the config file, without coding a plugin or compiling GeDoSaTo. Currently, I’ve added a config file for Blackguards which uses this feature.
Download GeDoSaTo 0.7 “Seishoujo Sacrifice” here, and I always appreciate any donations made here.
If you find a shader hash and create a config file for a given game, please post it on github, I will then include it in future releases.
I just fixed the alt-tabbing crash when downsampling.
This was the result of a bit more than 3 hours of heavy debugging today, after doing the same already (unsuccessfully) a few times previously over the week.
Basically, the issue has always been that my calls to
device->Reset() returned a
D3DERR_NOTAVAILABLE error code. According to the documentation that’s not even possible, but here we are.
My error when debugging this was assuming that similar issues as for “normal” programs could apply. So I spent most of my time trying to hunt down a resource/memory leak – the usual cause for failing calls to
Reset(). I should have known that I am not someone who just leaks memory willy-nilly ;). By the way, Microsoft’s PIX works really well for memory leak debugging DirectX9 applications.
The actual cause was much more obscure, and directly related to what a rather insane piece of software GeDoSaTo is in the first place. Basically, while downsampling, GeDoSaTo manipulates the results of umpteen Windows API calls to give an application the illusion – as perfectly as possible – that it is running on a display featuring the downsampling resolution. As it turns out, when DirectX performs a
Reset operation, it checks whether its resolution switching succeeded using one of these APIs. So, after many hours over weeks of debugging, the solution to the crash is simply to turn off all the relevant interception mechanisms while the
Reset() call is happening.
The source code for GeDoSaTo is now online at:
It includes a (rather short) developer Readme. The code base is, in my opinion, in a much better state than DSfix and DPfix, though I wouldn’t call it “clean” still. But it shouldn’t be too hard to get into.
I hope everyone who has sent me technically detailed mails about potential improvements (and everyone else interested of course!) will contribute!
The best way of contributing is using the GitHub facilities. That is, fork the project, add your improvements, and gather and document them into a pull request. As I wrote in the readme, if you plan to add a major new feature, it would be very helpful if you could contact me before (e.g. by email with a suitable subject line) so that we can discuss the design and not duplicate any work.
Please use the comments for this blog post only to discuss development or issues with this source release!