AC Odyssey and Reshade's severe performance impact

  • pyewacket
  • Topic Author
More
4 years 6 months ago - 4 years 6 months ago #1 by pyewacket AC Odyssey and Reshade's severe performance impact was created by pyewacket
I came across an interesting issue with Reshade in ACO and i want to share it. Apologies if it's known.

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.
Last edit: 4 years 6 months ago by pyewacket.

Please Log in or Create an account to join the conversation.

  • JBeckman
More
4 years 6 months ago - 4 years 6 months ago #2 by JBeckman Replied by JBeckman on topic AC Odyssey and Reshade's severe performance impact
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. :)
Last edit: 4 years 6 months ago by JBeckman.

Please Log in or Create an account to join the conversation.

  • pyewacket
  • Topic Author
More
4 years 6 months ago #3 by pyewacket Replied by pyewacket on topic AC Odyssey and Reshade's severe performance impact
Hmm, so do i understand correctly then, that in theory one could make some sort of a custom version of Resahde with disabled depth buffer access specifically for such cases as ACO? And that could solve this issue?

Please Log in or Create an account to join the conversation.

  • JBeckman
More
4 years 6 months ago - 4 years 6 months ago #4 by JBeckman Replied by JBeckman on topic AC Odyssey and Reshade's severe performance impact
Yes the source code from what I remember has a parameter for just not using the depth buffer though it's not something that can be set from the config file in the current compiled versions of ReShade's .dll files so it's holding it a bit and thus a performance hit though I never really measured just how much it was affecting performance though from the way Kaldaien mentioned it plus the build of SpecialK's ReShade fork working around it was going to be at least a measurable hit. :)

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.)
Last edit: 4 years 6 months ago by JBeckman.

Please Log in or Create an account to join the conversation.

  • pyewacket
  • Topic Author
More
4 years 5 months ago #5 by pyewacket Replied by pyewacket on topic AC Odyssey and Reshade's severe performance impact
Just to update. First of all NV Freestyle wasn't working because at the time i was playing Uplay+ version of the game which uses different executable, so that's why. When i tested in CPU intensive place (Athens) with Freestyle frame pacing impact was even worse than Reshade's on my system. It would show higher fps in static scenes compared to Reshade, but in actual gameplay when you move the frame pacing is much worse. Shouldn't be a surprise considering similarities. Another difference is that as soon as you turn off preset in Freestyle performance goes back to normal, while with Reshade you actually need to restart the game without Reshade, just toggling off won't do the trick.

Please Log in or Create an account to join the conversation.

  • thalixte
More
4 years 5 months ago - 4 years 5 months ago #6 by thalixte Replied by thalixte on topic AC Odyssey and Reshade's severe performance impact

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
).
Last edit: 4 years 5 months ago by thalixte.

Please Log in or Create an account to join the conversation.

We use cookies
We use cookies on our website. Some of them are essential for the operation of the forum. You can decide for yourself whether you want to allow cookies or not. Please note that if you reject them, you may not be able to use all the functionalities of the site.