Shader Compilation on PC: About to become a bigger bottleneck?

So Darksiders 2 was updated today to DX12 and has implemented an RT mode... and you guessed it.. it now stutters when compiling shaders. There's no shader precomp process.

Devs actively updating these old ass games to the new APIs and basically making them perform worse. Sigh 😮‍💨
 
Does the game still have the old renderer or is it just DX12 now?
Right now the patch is only available as a beta channel, so it's still possible to play the older version of the game, and perhaps it isn't quite 100% ready to go and they're basically testing it out?

I don't think the new version supports the old renderer at all, it requires DX12.
 
I'm very happy Alex made those tweets. Some actions need to be taken, and I hope people far and wide retweet and spread the message of Microsoft's own failures on this issue.

I've always said the "solution" will have to be a multi-pronged approach. Devs/Pubs have certainly been getting better, bit what about all the games that released before? Fossilize solves a lot of that on Linux. Something needs to be done for an equivalent for DirectX on Windows. And like he said, Windows in general needs some other fixes geared towards gaming as well.

It's time to start speaking up loudly about these issues so they don't fester and get worse again.
 
Fossilize is not a part of an API nor is it a part of the OS, it's a part of Valve's Steam distribution system. Microsoft can't copy it by themselves as they don't control Steam, and they don't have any incentive to provide Steam with API options which would allow it to plug Fossilize into DX. The comparison here isn't apples to apples unfortunately and I don't think that it's up to MS alone to make something like Fossilize possible on Windows.

A better solution would still be to fix the underlying API issue at its root.
 
Fossilize is not a part of an API nor is it a part of the OS, it's a part of Valve's Steam distribution system. Microsoft can't copy it by themselves as they don't control Steam, and they don't have any incentive to provide Steam with API options which would allow it to plug Fossilize into DX. The comparison here isn't apples to apples unfortunately and I don't think that it's up to MS alone to make something like Fossilize possible on Windows.

A better solution would still be to fix the underlying API issue at its root.
What the hell are you talking about that there's no incentive to work with Valve and others to have a plug-in Fossilize equivalent for DirectX? Literally ALL of the games that have released for the past 2 generations of MS' DX12 API aren't going to be fixed by developers... They absolutely could build this functionality into the API so Valve and others could plug in to it.
 
What the hell are you talking about that there's no incentive to work with Valve and others to have a plug-in Fossilize equivalent for DirectX? Literally ALL of the games that have released for the past 2 generations of MS' DX12 API aren't going to be fixed by developers...
They also bring exactly $0 of revenue to MS.
 
Free upgrades since 2015...

MS gets $0 from games released in Steam (unless it's their own games of course).

and directx
Free API download.

As I've said MS doesn't have any incentive to help Valve of all possible players fix shader compilation stuttering.
Maybe if SteamOS would start actively eating up their Windows user base then there would be such incentive. But I don't think it's realistic to expect that.
 
Free upgrades since 2015...


MS gets $0 from games released in Steam (unless it's their own games of course).


Free API download.

As I've said MS doesn't have any incentive to help Valve of all possible players fix shader compilation stuttering.
Maybe if SteamOS would start actively eating up their Windows user base then there would be such incentive. But I don't think it's realistic to expect that.
Dumbest things I've heard in my life. So why bother with DirectX at all? Why should they fix "underlying issues first" then huh?
 
They also bring exactly $0 of revenue to MS.
If MS is serious about taking Xbox multiplatform then they are motivated to make sure the Xbox experience doesn't suck on PC. But how would they accomplish what Valve is doing with Fossilize? On Windows your games could come from anywhere. Maybe they just do it for MS Store and Gamepass stuff. Surely that wouldn't piss everybody off :)
 
Dumbest things I've heard in my life.
Okay.

If MS is serious about taking Xbox multiplatform then they are motivated to make sure the Xbox experience doesn't suck on PC.
Which is why their own games usually have proper shader compilation in them. You don't need Fossilize for that.
Also I don't think that this has anything to do with their Xbox plans or them going multiplatform.
 
Even if MS does not want to do it I'm surprised none of the IHV's has done this. They already have an app on users systems that can be used to list available games and displays an overlay for those games. They also get a lot of games before release so they can make a driver profile for them or optimize their drivers. They also know exactly which of their GPUs requires which compiler flags so they could do even something more ambitions as Fossilize where they collect the PSO's on user machines and then build the PSO's in the cloud for each GPU they produce. Then the user only needs to download the compiled PSO's instead of compiling themselves. So users could choose to trade bandwidth for CPU utilization depending if they wish to. IHV's also have a lot more to gain from this than MS. Just imagine if one IHVs would do this then it would not take long before gamers would call the cards from their competitors stutter-cards.
 
Could the behavior certain game engines have in which uncompiled shaders are skipped and compiled asynchronously instead of holding up the frame be implemented as the default at the API/runtime/driver level?
 
Could the behavior certain game engines have in which uncompiled shaders are skipped and compiled asynchronously instead of holding up the frame be implemented as the default at the API/runtime/driver level?
The problem is that some shaders are compute only and some produce output that is consumed later by other shaders. So it's hard to pick out which shaders are safe to skip. But what could be done is making it so that the first time a shader is compiled this is done without optimizations so the compilation is faster. Then the shader is compiled again with optimalizations in the background and when that is ready the optimized version is used.
 
Back
Top