Performance parity DX11 vs DX12 (again)

Hi,

I thought it would be time again to do another DX112 vs DX12 comparison, as more and more features are DX12 only, and DX12 is default API in Unity 6.3. Unfortunately, there still does not seem to be performance parity between DX11 and DX12.

Here test results from same build of one of our OpenXR titles, measured on Unity 6000.3.18f1 URP with demanding settings (target 90FPS):

DX11
5GB VRAM
72 FPS
3.5ms CPU time

DX12
7GB VRAM
73 FPS
6.0 CPU time

Unfortunately, I was not able to capture GPU time on DX11 (was reported wrongly in FpsVR, a Steam tool for performance measurement); as we are GPU bound, it seems that at least on GPU performance, DX12 is same or better, as FPS was consistently a bit higher. But both VRAM usage and CPU time are still drastically worse (using Graphics Jobs set to “Split”).

Is this a known issue, and is there still work being done to reach parity?

This will never happen. They are two very different APIs. As different as DX11 is different from Vulkan and from OpenGL kind of different. DX12 only bears the name of its predecessor but technically it works very differently and is a complete rewrite of the API.

You can today get both better or worse performance with DX12, it really heavily depends on what you are testing!

So if you keep waiting for parity you will keep being disappointed. To get better performance out of your game when switching from DX11 to DX12 the only option is to change what your game render and how it is rendering it, in terms of shaders, asset import settings, render settings for the most part.

I am getting better performance, but with nearly 50% plus VRAM usage and double CPU usage (we are GPU bound as I wrote)… Not sure how this is connected to my asset import settings or shaders. If there are some magic switches or other strategies to reduce VRAM usage or CPU usage, I am eager to try!

this was the relevant post from unity

I’m still using DX11. CPU utilization is lower, memory use is lower, and FPS is the same or better.

The idea that DX12 will always be slower by design is false. Unreal Engine’s DX12 implementation started out slower than DX11 in the 4.x releases. Over several years, they continued to optimize it and eventually reached and exceeded performance parity.

There are plenty of opportunities for Unity to improve its DX12 performance over time.

Do you think that Using 40% more VRAM and almost double CPU usage is inherent to the DX12 API? Why would it do that? This sounds like an implementation issue to me.