iRacing runs on Directx 9, an old version of the API libraries, and many times we already heard about porting process coming to an end stage. At the end of this month, Windows 10 will be out along with Directx 12. Being a free upgrade for the Windows 7 and 8 users makes a new interesting point of view. Should we move to 11 version or waiting a few more months to adopt the last newcomer?
Jason Fleischli wrote some thoughts about the process of porting, tasks, advantages and disadvantages of this new challenge.
If you go look at the presentations all those questions are answered but here’s mine:
Port from DX(any) to DX 12 is a big task because it forces you to:
- Make your app and render engine multi-threaded to realize the most gain.
- Manage your CPU–GPU data coherency synchronization yourself. (not a big deal, they know what this is per frame anyway)
- Manage the GPU memory resource allocation and use yourself. (but this is AWESOME.)
- Manage the render command work queues yourself. (i.e. render the mirrors in worker threads in parallel on other cpus)
- Manage the new resource heap style bindings yourself ( you control the multi GPU workloads if present.)
- Recognize and take advantage of frame to frame repeated draw command bundling (command bundling new for DX12 and very cool)
but the payoffs for doing it, if taking full advantage of the power and control over the resources being given to the developers, are a demonstrated big FPS gain compounded with a reduction in cpu overhead.
An app written for DX9/10/11 without re-writing it for 12 will not see much gain also demonstrated in the videos.
Basically DX12 would give iRacing developers the tools to properly implement SLI support for their app which is not simple when you are drawing 3 screens as separate scenes (because of the perspective shifting [Monitor angles]) and drawing essentially a separate reversed scene in each mirror.
With DX12, and say 3 GPU’s available in SLI iRacing would have the say in app on which GPU does exactly which workload which is really what they need. Currently the SLI work loads are controlled by the drivers which are built for simple single scene single display rendering with massive inefficiencies in use of resources… for example in standard dual SLI if you have 2x 3 GB cards you still see 3GB of total available memory because all the loaded objects and textures are loaded into both cards yes in duplicate and each GPU renders every other frame drawn to the screen and data coherency has to be synchronized between both cards every frame.
Thats why 3 and 4 cards in SLI dont give you 3x and 4x the FPS, because the data coherency synchronization for AFR increases exponentially. DX12 seems to have the approach to help this issue alone a lot… the power and control shifts to the developers in a big way is the bottom line and if it were my project I would port to 12 asap since the hardware to run it is already 50% of the user base.
One of the reasons its tied to Windows10 is proper support of this paradigm shift requires a new WDDM (Windows Display Driver Model). The other of course is thats what Microsoft has always done. BUT this time they are giving existing certified windows users free upgrade to 10 for a year when it comes out including win7 users.. (XP users not included as XP is no longer supported.)
Thats the short version of it all.
Not really sure if I am the only one which doubt about this big step.
Without analysis seems that every step forward should be positive, adding more immersion and fidelity but I would like to think we are not starting from the scratch anymore. We’ve conquered a enough stable milestone and we should be aware about what this means. Big changes always comes with contingencies, like mobile app updates, or every software update really.
There already are samples on the market. AC has been criticized for its low performance and highly complex balance graphic configuration. Rfactor2 seems to be on the same league. The entrance requirement should be low, affordable and publicly available, one of the keys to keep growing.
Update 2016S2 from Tony Gardner:
“Our major graphics engine upgrade from DX9 to DX11 is going very well although testing and work continues on various odds and ends. The massive list of work we had to do is pretty small at this point. Our current plan for the March build is the sim will default to the current graphics engine, DX9. However we are happy to say you should have the choice to load DX11 in the March build and try it out in your races or testing. You can go back and forth between the two if you want or if any issues with one or the other. Although we have been testing DX11 in Alpha for months we will still consider this role out to members in March to be part of that “alpha” testing process to iron out any issues. Hopefully there are few or none but you will have DX9 to fall back on.
Then our guess is in the June build it will be reversed. DX11 will be the default and DX9 will be the alternative option.
Then late in the year or certainly at some point we will stop supporting DX9 as it is very inefficient to keep developing for both. Additionally, DX9 at that point would be holding us back graphically and performance wise.”