AC Odyssey and Reshade's severe performance impact
- pyewacket
- Topic Author
prnt.sc/paxe6j This is game's performance without Reshade installed. It's not just toggled off, it's not hooked at all.
prnt.sc/paxc3h This is game's performance with Reshade installed. I toggled it off to make the point obvious, but it doesn't really matter, the issue is not with shaders you load, the issues is with how Reshade itself seems to interact with this particular game. Obviously same in-game settings, driver version etc, win10 1903 and i did test with other driver versions. The rig is R5 1600@4Ghz and 1660Ti.
It's a long story how i came across this issue, but the best explanation i've seen so far is given by Kaldaien here: steamcommunity.com/groups/SpecialK_Mods/...c1735468061756076011
I assume this issue can't be easily solved if at all, but i just wanted to share it. On that note, it would be very interesting to compare it with Nvidia Freestyle, since i assume the 2 are very similar in nature, but unfortunately Freestyle seems to be broken atm in ACO, at least i couldn't make it work no matter what.
Please Log in or Create an account to join the conversation.
- JBeckman
Most games don't use quite that many other than possibly Greedfall due to a designer oversight where the number of cores equals the numbers of threads created which can be anywhere from 4 to 16 as a result.
Assuming the design in ReShade hasn't changed since let's see SpecialK forked off and built upon 3.0.8 then it might still be locking in the same way and thus a performance hit is induced which I think can then only be resolved by disabling the depth buffer though I am fairly certain that's just a flag during compile of the code and while Odyssey and Origins both have some networking it's not really persistent enough to where ReShade closes depth buffer access though then that would have negatively affected any shader requiring the depth buffer.
Moving into D3D12, Vulkan and newer features and functionality might see this change too for ReShade although for now I don't think there's much to be done about it and I'm not very knowledgeable about the code situation and how this all works myself though I have some basic grasp of how this is happening and what's causing it but nothing really in-depth.
Please Log in or Create an account to join the conversation.
- pyewacket
- Topic Author
Please Log in or Create an account to join the conversation.
- JBeckman
SpecialK's ReShade is a bit stripped down though and a bit more is left to SpecialK itself and it handling things so it might not be the easiest feature to implement in ReShade itself for how it handles well I'm not very good at the tech but holding or locking the depth buffer at least for when multi threaded rendering is a feature and in this case also a very extensively used one so probably also affecting performance more noticeable than many other games using this.
That and I am on a AMD GPU here so it differs a bit because they never implemented D3D11.1 driver command lists (Optional feature after all.) and multi threaded rendering is different and less of a feature or priority focusing on D3D12 (Mandatory here among other things.) and Vulkan but D3D11 is suffering a bit.
(For Origins and Odyssey the perceived CPU and GPU performance deficit and compared to NVIDIA supporting this is upwards of 40% although the newer GPU's work around the CPU limit and hit close to competing hardware although working with a penalty so they really should just overhaul that even if it's a lot of work.)
Though that goes beyond this little ReShade specific thing with how the newer games and game engines use multi threaded rendering and deferred context threads and D3D11.x features more extensively.
Then there's also NVIDIA with NVAPI and helping out D3D11 a bit but that's also specialized a bit beyond just ReShade though utilizing SpecialK and the CPU thread widget it is actually possible to see these eight additional threads it creates here for this purpose though it doesn't really help with anything as such they're just kinda there and there's eight of them also regardless of the users system and hardware thus why a hexa or octa core is heavily recommended.
(Which I at least assume also affects performance more noticeable working across eight cores here and resulting snags in multi threaded rendering and how it affects ReShade compared to say just having one or two additional threads for this task.)
Please Log in or Create an account to join the conversation.
- pyewacket
- Topic Author
Please Log in or Create an account to join the conversation.
- thalixte
JBeckman wrote: Yeah the game creates 8 deferred render contexts for D3D11 and I believe the 11.1 driver command list and multi-threading functionality.
Most games don't use quite that many other than possibly Greedfall due to a designer oversight where the number of cores equals the numbers of threads created which can be anywhere from 4 to 16 as a result.
Assuming the design in ReShade hasn't changed since let's see SpecialK forked off and built upon 3.0.8 then it might still be locking in the same way and thus a performance hit is induced which I think can then only be resolved by disabling the depth buffer though I am fairly certain that's just a flag during compile of the code and while Odyssey and Origins both have some networking it's not really persistent enough to where ReShade closes depth buffer access though then that would have negatively affected any shader requiring the depth buffer.
Moving into D3D12, Vulkan and newer features and functionality might see this change too for ReShade although for now I don't think there's much to be done about it and I'm not very knowledgeable about the code situation and how this all works myself though I have some basic grasp of how this is happening and what's causing it but nothing really in-depth.
Hello, JBeckman
The pb stated by Kaldaien is solved since the early months of 2018, and it was solved by... OtisInf (yes, the guy behind the great camera tools)... To implement the dx12 depth buffer detection, i partly relied on this work. Yes, ACO is heavily multi-threaded, but all those command list are now treated independantely, and the info retrieved from them are merged each time a command list is treated by the game engine in the devicecontext stage (and not at the runtime stage, like it was before), so it should not introduce a bottleneck anymore at this point. I personnaly don't have big performances impact on ACO due to Reshade alone. However, depending on the shaders used, and the resolution of the game, you can experiment sensitive impacts on the game perfs. You can monitor this impact in the "statistics" tab.
Remember SpecialK uses an obsolete version of Reshade (but you can change it in the SpecialK params to plug a recent Reshade version). That's what i did in ACO (
forums.guru3d.com/threads/assassins-cree...page-17#post-5597826
www.resetera.com/threads/assassins-creed....72079/post-13960178
).
Please Log in or Create an account to join the conversation.