• Hey, guest user. Hope you're enjoying NeoGAF! Have you considered registering for an account? Come join us and add your take to the daily discourse.

GeDoSaTo - Downsampling from Infinity and Beyond!

Durante

Member
Look what we have here:
dx11_resselectionmmsbo.png


I'd like to make very clear that this doesn't actually work yet, and probably won't for a long while still. But I now have DX11 listing injected resolutions. Fun facts:
  • Requirements for DX9 to list injected resolutions: Intercepting 2 windows API functions and 2 COM classes
  • Requirements for DX11/DXGI to list injected resolutions: Intercepting 9 COM classes (respecting their class hierarchies)

And people say things get easier!
 
Look what we have here:
dx11_resselectionmmsbo.png


I'd like to make very clear that this doesn't actually work yet, and probably won't for a long while still. But I now have DX11 listing injected resolutions. Fun facts:
  • Requirements for DX9 to list injected resolutions: Intercepting 2 windows API functions and 2 COM classes
  • Requirements for DX11/DXGI to list injected resolutions: Intercepting 9 COM classes (respecting their class hierarchies)

And people say things get easier!
This is fantastic progress. Awesome stuff Durante!

I must say, I am somewhat surprised that the DX11 intercept is so much more "numerous" and complex though. If Dx11 is like that... how brutal coul DX12 end up being?
 

Durante

Member
This is fantastic progress. Awesome stuff Durante!

I must say, I am somewhat surprised that the DX11 intercept is so much more "numerous" and complex though. If Dx11 is like that... how brutal coul DX12 end up being?
Actually, I'm not even really at the "DX11" part yet.

Starting with DX10, MS split the handling of display devices, modes etc. (obviously highly relevant for what GeDoSaTo does) off from the actual 3D rendering into its own API, DXGI. This is, in principle (and really, even in practice if you're not in the business of doing insane stuff no one should be doing) a very good thing. DXGI is designed well, but it's also an object-oriented COM API and designed to be very flexible (it's even used on Windows Phone!), so it's more involved from the interception perspective.
 

Spazznid

Member
Why would you disable the Steam overlay?

Anyway, my advice would be to set GeDoSaToTool to autostart, and (if you haven't already) disable UAC. And be a much happier person.

That's a bug some people have, and not one I could ever reproduce.

Edit:
I just realized while looking for games for testing in my Steam library that I own almost no DX11 games. Could it be that that API is almost exclusively used by "AAAA" games I don't play?

Edit2:
Origin (or more specifically, Dragon Age 2) to the rescue!


I told you before, and I'll tell you again. I'm perfectly willing to share my Steam Games with you. You're on a very different time zone than I so it would work well enough. The offer is always there. I have bills stacked up and haven't been able to donate, so that's the best way I can contribute to the developement.

If you're unsure of how it works, I'd change my password, let you log on to my account for a minute and enable your computer for sharing, then you'd switch back to your account and I'd change my password back. That would allow you to play any of my games when I'm not playing, on your account.
 

Durante

Member
I discovered (or rather, re-discovered) that Strike Suit Zero is also DX11, and so is Marlow Briggs. I should be set in terms of DX11 at least until it's time for some broader testing, which is probably a long time from now still.
 
I discovered (or rather, re-discovered) that Strike Suit Zero is also DX11, and so is Marlow Briggs. I should be set in terms of DX11 at least until it's time for some broader testing, which is probably a long time from now still.

Could you explain why it's so difficult to make GeDoSaTo compatible with DX11 compared with DX9 and 10? Not that I'm saying it isn't, it's just I have no real technical understanding of these things, and am curious on why DX11 always poses problems with applications similar to yours.
 

Alo81

Low Poly Gynecologist
Could you explain why it's so difficult to make GeDoSaTo compatible with DX11 compared with DX9 and 10? Not that I'm saying it isn't, it's just I have no real technical understanding of these things, and am curious on why DX11 always poses problems with applications similar to yours.

I believe most of the point is just that DX9 is more common. Since there are more DX9 games, people who are making applications like this target DX9 support first as that means there are more games it will be compatible with. Then they move onto DX11 later not necessarily because it'll be way more challenging, but because practically it makes more sense to do DX9 first.
 

Durante

Member
Could you explain why it's so difficult to make GeDoSaTo compatible with DX11 compared with DX9 and 10? Not that I'm saying it isn't, it's just I have no real technical understanding of these things, and am curious on why DX11 always poses problems with applications similar to yours.
First of all, 10 wouldn't be any more or less difficult than 11 or 9, but I'll probably never do it. There are just not enough games with a DX10 renderer to make it worth it.

As for DX11, a big part of it is that months of work have gone into the DX9 path in GeDoSaTo by now (I started working on it around Christmas 2013), and comparatively little of that can be reused for DX11. So it's almost like doing all that work for a second time. On top of that, DX11 does have some features that make it harder to deal with for this kind of thing than DX9, including:
  • It's more object oriented and modular as an API, particularly together with DXGI, so there are simply a lot more individual interfaces to wrap than before.
  • DX11 has "deferred contexts", and with them the ability for multiple threads to interact with the API. Multithreading always makes software more complex, and this is more true in a low-level dll interception/injection scenario than most others. I'm still not sure if I can ever provide every feature supported in DX9 in DX11 due to this.
  • As you say, there are far fewer tools and simply less knowledge in the community about DX11 and DXGI wrapping. This means I have to do a lot of things from scratch, and even had to build my own tools for generating wrapper classes.

Of course, GeDoSaTo being open source should at least fix that last point for others. Anyway, it's a long way to go still.
 

Parsnip

Member
How do older DX versions compare in that sense?
I know there are a couple DX8 to DX9 wrappers around (boris at least wrote one and I think crosire wrote one very recently as well), which has led me to assume that they are similar, but that's probably a bad assumption on my part.
 

BONKERS

Member
Well, it's just for that particular case since I can crank the AA so high. MSAA support is kinda dead these days so it's not really applicable to most games, heh.

At such levels of downsampling, 8xMSAA isn't going to be of much help anyway. Especially in just about any game made in the last 10 years since it's still only affecting geometry

4xMSAA would be more than sufficient when downsampling for geometry at least.
 

Durante

Member
How do older DX versions compare in that sense?
I know there are a couple DX8 to DX9 wrappers around (boris at least wrote one and I think crosire wrote one very recently as well), which has led me to assume that they are similar, but that's probably a bad assumption on my part.
DX8 is quite similar to 9 (9 is mostly a straight extension), that's why it's not too hard to wrap.

I honestly don't even remember much about DX7.
 

Carlius

Banned
does gedosato work with enb now? i read on the enb dark souls 2 forums that they do both work together now, is that true? and what do i do?
 

Dries

Member
Look what we have here:
dx11_resselectionmmsbo.png


I'd like to make very clear that this doesn't actually work yet, and probably won't for a long while still. But I now have DX11 listing injected resolutions. Fun facts:
  • Requirements for DX9 to list injected resolutions: Intercepting 2 windows API functions and 2 COM classes
  • Requirements for DX11/DXGI to list injected resolutions: Intercepting 9 COM classes (respecting their class hierarchies)

And people say things get easier!

Awesome work, Durante! I tried your tool for the first time yesterday and you've got yourself a new fan. DX11 support would be awesome. Imagine using GeDoSaTo with The Witcher 3. Glorious!
 
Code:
# The maximum degree of parallelism for screenshot encoding
#  N = use up to N worker threads for screenshots
#  0 = synchronous (no parallelism)
# -1 = TheOctagon mode (stores .bmp using D3DX API, very slow, use only as a workaround)
maxScreenshotParallelism 4
Try this.

I'm having some really annoying issues trying to capture 8K screenshots of Castlevania LOS2. The game crashes every time. The max res I can capture without a crash is 6240x3510.

I tried setting this:

maxScreenshotParallelism -1

GeDoSaTo still says it's saving PNGs, but it actually saves nothing. Any ideas? Probably just this damn game....
 

Durante

Member
Have you tried setting it to 0?

Normally, these issues with extreme resolutions seem to turn out to be cases of the game processes running up against the 32 bit process memory limit. So if the game doesn't already, you could try to mod the executable to set the LAA flag.
 
I didn't set it to 0 yet. I'll give that a shot tonight.

I tried setting the LAA flag with CFF explorer, but the game would not launch. I had to remove the flag to play again. Boo hiss.
 

Spazznid

Member
Have you tried setting it to 0?

Normally, these issues with extreme resolutions seem to turn out to be cases of the game processes running up against the 32 bit process memory limit. So if the game doesn't already, you could try to mod the executable to set the LAA flag.

I never remember that tool.
 

kiyomi

Member
So I'm having a weird issue with Divinity: Original Sin. The downsampling is fine; and makes a really nice improvement to the general IQ which I find to be lacking with 1x SMAA.

The problem however, is that I can't seem to be able to edge pan to the right, or down. I can only pan to the left or up. I'm also having a problem where if I tab out to something else and then try to tab back into the game, it won't work. I've only tried fullscreen.

# Needed for proper mouse functionality
interceptWindowProc true

# These are required for launching in borderless fullscreen mode
#modifyGetClientRect false
#modifyGetWindowRect false

# Game has good quality SMAA built in
aaQuality 0

# HUDless, Need in-game smaa for this to work
injectPSHash a62427bf
injectDelayAfterDraw true

renderResolution 2560x1440@74

presentWidth 0
presentHeight 0
presentHz 74

scalingType bicubic

modifySetCursorPos true

modifyGetCursorPos true
 

Durante

Member
I was getting tired of writing lots of code without any visual outcome (for DX11/DXGI), so I wrote a little code with a significant visual outcome.

It was also requested multiple times:
aspectratio0wsv5.jpg


So I'm having a weird issue with Divinity: Original Sin. The downsampling is fine; and makes a really nice improvement to the general IQ which I find to be lacking with 1x SMAA.

The problem however, is that I can't seem to be able to edge pan to the right, or down. I can only pan to the left or up. I'm also having a problem where if I tab out to something else and then try to tab back into the game, it won't work. I've only tried fullscreen.
The panning is a known issue. However, there should be no problem alt-tabbing. Personally, I sue the in-game borderless fullscreen mode in Divinity: OS though (be aware that it requires a mouse config change).
 

kiyomi

Member
The panning is a known issue. However, there should be no problem alt-tabbing. Personally, I sue the in-game borderless fullscreen mode in Divinity: OS though (be aware that it requires a mouse config change).

Do you know which exactly? I enabled the modifyGetClientRect/modifyGetWindowRect as per the instructions for borderless fullscreen, but a combination of the activating/deactiving the rest of them hasn't helped me.

Sorry for the questions, new to all this! I appreciate the work and help here.
 

DSN2K

Member
having an issue with Steam, it wont load when GeDoSa is active and its not on the white list so im a tad confused.
 
If I want to play a game at an aspect ratio like 7680x3200 (12 :5) on a 1920x1080 monitor, how do I prevent GeDoSaTo from stretching it? Nothing I have tried works.

having an issue with Steam, it wont load when GeDoSa is active and its not on the white list so im a tad confused.

Same problem with no solution it seems.
 

Alo81

Low Poly Gynecologist
If I want to play a game at an aspect ratio like 7680x3200 (12 :5) on a 1920x1080 monitor, how do I prevent GeDoSaTo from stretching it? Nothing I have tried works.



Same problem with no solution it seems.

I was getting tired of writing lots of code without any visual outcome (for DX11/DXGI), so I wrote a little code with a significant visual outcome.

It was also requested multiple times:
aspectratio0wsv5.jpg

It's in development right now. I don't know if Durante pushed it yet, but update to the latest to see.
 
I updated my GeDoSaTo and that seemed to be in there (just looking at the settings). I haven't had a chance to test it though since the game Im playing only allow 16:9 resolutions >__>

# Whether to maintain the aspect ratio if different ratios between input and output
# false = stretching
# true = pillar/letterboxing
maintainAspectRatio true
 
Double posting because this new setting is cool as fuck.

# Forces the present resolution to be set, regardless of what the game requests
# usually only makes sense in conjunction with game-specific plugins
# for games with resolution limits
forcePresentRes true

Until now, Castlevania LOS2 would ONLY support 16:9 resolutions. But not anymore!

I can force the game to properly run at 3600x4800 (for example). Of course, the game was still forcing a 16:9 aspect ratio in-game, so it was stretching from 16:9 -> 3:4. But I was able to find the aspect ratio setting in the camera structure and change it from 1.77 to 0.75.

Before my fix:

After my fix:
 
I was getting tired of writing lots of code without any visual outcome (for DX11/DXGI)
Wish I could help but I don't have a lot of experience with DX11. I barely remember the APIs. I remember how painful it was to learn all that after DX9 and realizing how different it was. I was mostly happy with just hooking Reset / Present (its DX11 equivalent I can't remember its name lol) to inject SMAA.

No need to hurry though you got all your time. You're working at such a fast pace already. Why not set Christmas 2014 as a good anniversary date for declaring DX11 working : ) ?
 
No need to hurry though you got all your time. You're working at such a fast pace already. Why not set Christmas 2014 as a good anniversary date for declaring DX11 working : ) ?

I'll be happy so long as GeDoSaTo DX11 is ready by:

Anytime before The Witcher 3 is released

I also have to hope that those devs are competent enough to put in proper aspect ratio support this time around. And maybe allow people to change the graphics settings *gasp* in-game!

Anyways, I'm pretty happy with the current set of DX9 features. I think all my future donations are going to go towards motivating Durante to work on DX11 :)

Actually, I was wondering something. I've run into 2 games now where the HUD renders differently in certain situations. For example, when I started Castlevania LOS2, I found a hash to remove the HUD. But that hash doesn't even exist where I'm at right now, so I needed to find another hash. What's even more annoying is the 2nd hash requires injectdelayafterdraw. In the case that the hash no longer works, pressing the hudless screenshot key actually says "captured full resolution screenshot" so I'm guessing when it doesn't find the hash, it falls back to the full res screeshot.

So this might be unrealistic, but is it possible to create a "fallback" hash? Or better yet, a comma delimited list of hashes that GeDoSaTo attempts to target?

I'm imagining something like this:

injectPSHash 3de11d46,aa219b4c,cd89f31c
injectDelayAfterDraw false,true,false

So if it doesn't find the first, it just moves on down the list?
 
I'm imagining something like this:

injectPSHash 3de11d46,aa219b4c,cd89f31c
injectDelayAfterDraw false,true,false

So if it doesn't find the first, it just moves on down the list?

I personally think maybe injectDelayAfterDraw should not be an independent value from the hash in that case. I would propose something more like:

injectPSHash 3de11d46|false;aa219b4c|true;cd89f31c|false;
 

Durante

Member
This is both possible and planned at some point. All a matter of time. (Note that there's also injectVSHash now which might help in some cases)
 

blaidd

Banned
Hey Durante,

I'm testing The Sims 4 for PCGH right now, and was experimenting with GeDoSaTo to get the most out of the rather ugly graphics. Downsampling works fine, however, since you can't click on anything, "interceptWindowproc=true" seems to be needed. The Sims 4 will crash once it's activated though (Version 0.13.1400). Just wanted to let you know.

Regards and keep up the good work,
blaidd
 

doomquake

Member
Wondering if this was discussed already - Gamebryo based game Warhammer Online is what I am testing at the moment. Looks good at 5120x2160 (21:9 monitor) , but I am having UI targeting issues - seems the UI is drawn centered, correctly, but mouse hits are drastically off center (somewhere in bottom right) - making the game unplayable.

have you dealt with UI issues with mouse targeting before?

*ah yes..mentioned in the FAQ .. but any fixes? or clues?
 

Parsnip

Member
Wondering if this was discussed already - Gamebryo based game Warhammer Online is what I am testing at the moment. Looks good at 5120x2160 (21:9 monitor) , but I am having UI targeting issues - seems the UI is drawn centered, correctly, but mouse hits are drastically off center (somewhere in bottom right) - making the game unplayable.

have you dealt with UI issues with mouse targeting before?

*ah yes..mentioned in the FAQ .. but any fixes? or clues?

Did you try any of the mouse fixes at the bottom of the ini?
 

Dries

Member
So if I force SSAO and DoF (for example) via GeDoSaTo should I disable those same settings in the in-game menus? Or does GeDoSaTo overwrite the in-game settings?
 

pa22word

Member
Has anyone attempted to use Gedosato with gsync? I wanna try DS2 with it but I'm sorta afraid to boot it up with both of them as gsync related crashed tend to kill my PC to the point I need a hard reboot in order to get out of them -_-;
 

One3rd

Member
I'm having some troubles getting GeDoSaTo to create a frame dump for Medal of Honor: Airborne. Everytime I try it spits out two images and then the game crashes with a KERNELBASE.dll error. Any ideas?
 

Alo81

Low Poly Gynecologist
So if I force SSAO and DoF (for example) via GeDoSaTo should I disable those same settings in the in-game menus? Or does GeDoSaTo overwrite the in-game settings?

Yep. If you're using GeDo's SSAO and DoF then disable the in game implementations. Always keep anti-aliasing on though.

Also, keep in mind that GeDo's DoF can be incredibly performance expensive, so if you get huge framerate drops be sure to play around with it.
 

peronmls

Member
I keep crashing with DS2 on start up. It's happening with my old and the new gedosato. Why does it keep doing it? I cant use it anymore.
 

Alo81

Low Poly Gynecologist
I keep crashing with DS2 on start up. It's happening with my old and the new gedosato. Why does it keep doing it? I cant use it anymore.

What's the error, fault module, etc etc?

Also, make sure you're running GeDo as administrator.
 

robgrab

Member
I'm trying to figure out how to get the shaders that were ported from SweetFX to work in GeDoSaTo. I copied the post.fx file from the assets folder to GeDoSaTo/config/Bioshock/ and edited it the way I normally would for SweetFX. Then in the GeDoSaTo.ini I changed Enable Postprocessing to true. When I try to launch the game it says something about it not being enabled in the configuration or something. What am I missing?
 

peronmls

Member
What's the error, fault module, etc etc?

Also, make sure you're running GeDo as administrator.

Problem signature:
Problem Event Name: BEX
Application Name: DarkSoulsII.exe
Application Version: 1.0.5.0
Application Timestamp: 53e04e3c
Fault Module Name: GeDoSaTo.dll
Fault Module Version: 0.0.0.0
Fault Module Timestamp: 5408b380
Exception Offset: 00142cfa
Exception Code: c0000417
Exception Data: 00000000
OS Version: 6.1.7601.2.1.0.256.1
Locale ID: 1033
Additional Information 1: 5bae
Additional Information 2: 5bae9e883101d736732d7cabba3cfef7
Additional Information 3: c6a7
Additional Information 4: c6a76705ff14c0c8d72c7604dd978b04
 
Top Bottom