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!
I’m rather proud of this release. There have been major changes under the hood, and I’m getting ready to release the source (and hopefully get bugfixes, improvements and plugins from lots of contributors).
First things first, I’ve decided to call this release the first beta. Also, since version numbers are dreadfully boring I’m adopting a new scheme whereby each release version will also have a name, and that name will be the name of an album I was listening to while working on it. This time around it’s “Stranger Than Fiction” by Bad Religion.
- Large-scale internal rewrite introducing game-specific plugin system
- Moved all Dark Souls 2 specific code to a Dark Souls 2 plugin
- Added generic plugin which supports AA and postprocessing in games without a game-specific plugin
- Added performance monitoring system (per-frame CPU and GPU timing)
- Added per-game settings support
- Various bugfixes
- Dark Souls 2:
- Added option for different types of SSAO blur (the softer and better performing one used pre-0.5, and a fixed version of the sharper one introduced in 0.5)
- Now start up activated by default
- Added Text viewer/editor component for readme viewing and editing setting files (has various text highlighting and autocompletion features)
- Fixed black/whitelist handling in some circumstances
- Fixed tray icon persistence in case of errors
Here is a screenshot of the new GeDoSaToTool UI:
And here’s what the performance monitor looks like:
In the source screenshot
for the image above you can see GeDoSaTo running with SMAA and postprocessing in Ys Origin.
Download GeDoSaTo 0.6 “Stranger Than Fiction” here, and as always you can donate here if you enjoy using it.
The next steps are writing some developer documentation and a ToDo list, and then getting the source up on GitHub.