This thread's primary focus is on the current and prospective future evolution of DirectX and Mantle, and the pros and cons of both APIs in regards to PC gaming.
How will DirectX evolve, and will Mantle ever gain a strong foothold in the gaming industry?
DirectX has been a major part of PC gaming for nearly two decades now, and has gone through monumental changes. Without unifying principles of DirectX, it's difficult to imagine what PC gaming would be like today with all the various architecture specific APIs that were in circulation before DirectX. A lot of misinformed critics would portray DirectX as being long in the tooth and stagnant, but Microsoft has clearly shown a willingness to continue making major refinements and upgrades to the API at the cost of both compatibility and upgradeability..
For example, DX10 was a major break from DX9, in terms of programming model and overhead; so much so that it required a new driver model that could not be ported back to Windows XP.. And DX11 provided a solid solution for the inefficient draw call submission problem, by using driver command lists across multiple threads to record data, eventually sending the command lists to the GPU for processing..
However, DX11 multithreading relies primarily on the GPU drivers to work and as such, was a huge undertaking for IHVs to implement. It took NVidia roughly two years before they provided a solid driver that could give a significant performance increase in Civilization 5, the first native DX11 title.
This was before NVidia released their DCL enabled driver:
And this is with the DCL driver:
As you can see, that's a massive 62% performance increase NVidia achieved with their DCL driver. A total game changer by any estimate.
AMD on the other hand was never able to release a DCL enabled driver, but eventually was able to catch up to NVidia when Tahiti was released. However, this doesn't reduce the impact of DX11 multithreading, because DX11 multithreading only removes CPU bottlenecks. Civilization 5 can be GPU, or CPU bottlenecked depending on the settings.
Here's an example. At GPU limited settings, the 7970 is faster than the GTX 580:
At CPU limited settings however, the GTX 580 is faster than the 7970:
So DX11 multithreading works, and works well by all appearances at doing what it was designed to do; reduce or eliminate CPU bottlenecks.
Now fast forward to 2013. Throughout this time, AMD has never released a DCL enabled driver. Rumors were that they were never able to get any performance increases with it. It either resulted in no performance increase, or LESS performance.
Implementing DX11 multithreading was never on AMD's list of things to do though, because unbeknownst to most, they had been developing a new API for years. They named this API Mantle, and it was formally announced on September 26 2013. There were clues though.
In 2011, Richard Huddy gave an interview to tech website Bit Tech, and in it he reiterated over and over his desire to "get rid of DirectX" as it was holding back PC gaming.
He also perhaps unintentionally provided evidence of AMD's shortcomings concerning DX11 multithreading, by saying that DX11 multithreading only resulted in a two fold increase in draw call submission; something we know for a fact is not true based on NVidia's results.
And in early 2013, AMD's Roy Taylor stated that there won't be a DirectX 12.
Fast forward to 2014, Mantle is finally tested. Although performance varied across numerous reviews depending on hardware and software configuration, certain trends and consistencies were observed.
1) The largest performance increases were on low end CPUs, combined with high end GPUs, thus showing that Mantle's main performance benefit lay in reducing CPU bottlenecks.
2) Mantle provided significantly less performance benefits for high end setups, with the exception of Crossfire..
3) AMD's D3D driver was vastly inferior to NVidia's when it came to negating or reducing CPU overhead..
So now with all of this said, lets look at the pros and cons of both APIs. Feel free to add some if I've missed any:
DirectX Pros:
1) Backward compatible
2) Supports many architectures
3) Provides unified base for PC gaming
4) Strong support in the industry
5) Is always being updated and improved
DirectX Cons:
1) Relatively high CPU overhead due to necessary abstraction to work across multiple architectures and support backward compatibility.
2) Inefficient draw call submission method. DX11 multithreading dramatically improves this, but it's very difficult for IHVs to implement and only NVidia supports this feature. Game developers have also been reluctant to support DX11 multithreading in their engines as well due to very limited IHV support.
3) The full scope of the GPU is often underutilized due to abstractive layers.
Now for Mantle.
Mantle Pros:
1) Built from the ground up to be a thinner, more efficient rendering API with excellent multithreading support.
2) Less operating overhead than DirectX, and theoretically much higher draw call submission rate..
3) Gives greater access and control over hardware to developers.
4) Relatively easy to implement alongside DX11 due to shared features such as HLSL.
Mantle Cons:
1) Currently restricted to GCN based hardware. Supposedly this can change, but with no official specs published, no one can say for sure.
2) Is incompatible with previous DirectX versions.
3) Introduces API fragmentation back into the PC gaming industry.
4) Limited game developer support.
5) No IHV support outside of AMD.
Despite what some of you may think, I am not necessarily completely opposed to Mantle. Mantle definitely has some excellent, and useful virtues. The more I think of it, the more I've come to suspect that AMD's goal with Mantle was never to supplant DirectX, but to eventually incorporate it into DirectX with Microsoft's blessing..
AMD has undoubtedly been having difficulty with DirectX and multicore support, whereas NVidia has been much more successful in that regard.
If the status quo were to continue (assuming there was no Mantle), AMD would eventually find itself in trouble as more and more game engines become multithreaded and reliant on the CPU for performance due to AMD's drivers not scaling particularly well past two cores, not supporting DX11 multithreading, and the frenetic pace of GPU evolution compared to CPU..
I think Mantle was designed to prevent that future catastrophe. By bringing the issue of draw call submission and CPU overhead front and center, AMD is forcing Microsoft to fully address these issues...at least as they see them. I don't think NVidia has an issue with DirectX's method of multithreading, as NVidia has gotten very large increases from it.
It's difficult to compare Mantle with DX11 multithreading though, as Mantle does significantly more than just reducing CPU bottlenecks. Whilst most of the performance increase gained by using Mantle comes from reductions in CPU overhead, some of it I think also comes from exposing more of the GPU's capabilities.
It will be really interesting to see whether Microsoft introduces a new DirectX with Windows 9, and whether they will keep the current multithreading model which puts the burden on the GPU driver, or go the Mantle route by putting the burden on the API itself.
How will DirectX evolve, and will Mantle ever gain a strong foothold in the gaming industry?
DirectX has been a major part of PC gaming for nearly two decades now, and has gone through monumental changes. Without unifying principles of DirectX, it's difficult to imagine what PC gaming would be like today with all the various architecture specific APIs that were in circulation before DirectX. A lot of misinformed critics would portray DirectX as being long in the tooth and stagnant, but Microsoft has clearly shown a willingness to continue making major refinements and upgrades to the API at the cost of both compatibility and upgradeability..
For example, DX10 was a major break from DX9, in terms of programming model and overhead; so much so that it required a new driver model that could not be ported back to Windows XP.. And DX11 provided a solid solution for the inefficient draw call submission problem, by using driver command lists across multiple threads to record data, eventually sending the command lists to the GPU for processing..
However, DX11 multithreading relies primarily on the GPU drivers to work and as such, was a huge undertaking for IHVs to implement. It took NVidia roughly two years before they provided a solid driver that could give a significant performance increase in Civilization 5, the first native DX11 title.
This was before NVidia released their DCL enabled driver:
And this is with the DCL driver:
As you can see, that's a massive 62% performance increase NVidia achieved with their DCL driver. A total game changer by any estimate.
AMD on the other hand was never able to release a DCL enabled driver, but eventually was able to catch up to NVidia when Tahiti was released. However, this doesn't reduce the impact of DX11 multithreading, because DX11 multithreading only removes CPU bottlenecks. Civilization 5 can be GPU, or CPU bottlenecked depending on the settings.
Here's an example. At GPU limited settings, the 7970 is faster than the GTX 580:
At CPU limited settings however, the GTX 580 is faster than the 7970:
So DX11 multithreading works, and works well by all appearances at doing what it was designed to do; reduce or eliminate CPU bottlenecks.
Now fast forward to 2013. Throughout this time, AMD has never released a DCL enabled driver. Rumors were that they were never able to get any performance increases with it. It either resulted in no performance increase, or LESS performance.
Implementing DX11 multithreading was never on AMD's list of things to do though, because unbeknownst to most, they had been developing a new API for years. They named this API Mantle, and it was formally announced on September 26 2013. There were clues though.
In 2011, Richard Huddy gave an interview to tech website Bit Tech, and in it he reiterated over and over his desire to "get rid of DirectX" as it was holding back PC gaming.
He also perhaps unintentionally provided evidence of AMD's shortcomings concerning DX11 multithreading, by saying that DX11 multithreading only resulted in a two fold increase in draw call submission; something we know for a fact is not true based on NVidia's results.
And in early 2013, AMD's Roy Taylor stated that there won't be a DirectX 12.
Fast forward to 2014, Mantle is finally tested. Although performance varied across numerous reviews depending on hardware and software configuration, certain trends and consistencies were observed.
1) The largest performance increases were on low end CPUs, combined with high end GPUs, thus showing that Mantle's main performance benefit lay in reducing CPU bottlenecks.
2) Mantle provided significantly less performance benefits for high end setups, with the exception of Crossfire..
3) AMD's D3D driver was vastly inferior to NVidia's when it came to negating or reducing CPU overhead..
So now with all of this said, lets look at the pros and cons of both APIs. Feel free to add some if I've missed any:
DirectX Pros:
1) Backward compatible
2) Supports many architectures
3) Provides unified base for PC gaming
4) Strong support in the industry
5) Is always being updated and improved
DirectX Cons:
1) Relatively high CPU overhead due to necessary abstraction to work across multiple architectures and support backward compatibility.
2) Inefficient draw call submission method. DX11 multithreading dramatically improves this, but it's very difficult for IHVs to implement and only NVidia supports this feature. Game developers have also been reluctant to support DX11 multithreading in their engines as well due to very limited IHV support.
3) The full scope of the GPU is often underutilized due to abstractive layers.
Now for Mantle.
Mantle Pros:
1) Built from the ground up to be a thinner, more efficient rendering API with excellent multithreading support.
2) Less operating overhead than DirectX, and theoretically much higher draw call submission rate..
3) Gives greater access and control over hardware to developers.
4) Relatively easy to implement alongside DX11 due to shared features such as HLSL.
Mantle Cons:
1) Currently restricted to GCN based hardware. Supposedly this can change, but with no official specs published, no one can say for sure.
2) Is incompatible with previous DirectX versions.
3) Introduces API fragmentation back into the PC gaming industry.
4) Limited game developer support.
5) No IHV support outside of AMD.
Despite what some of you may think, I am not necessarily completely opposed to Mantle. Mantle definitely has some excellent, and useful virtues. The more I think of it, the more I've come to suspect that AMD's goal with Mantle was never to supplant DirectX, but to eventually incorporate it into DirectX with Microsoft's blessing..
AMD has undoubtedly been having difficulty with DirectX and multicore support, whereas NVidia has been much more successful in that regard.
If the status quo were to continue (assuming there was no Mantle), AMD would eventually find itself in trouble as more and more game engines become multithreaded and reliant on the CPU for performance due to AMD's drivers not scaling particularly well past two cores, not supporting DX11 multithreading, and the frenetic pace of GPU evolution compared to CPU..
I think Mantle was designed to prevent that future catastrophe. By bringing the issue of draw call submission and CPU overhead front and center, AMD is forcing Microsoft to fully address these issues...at least as they see them. I don't think NVidia has an issue with DirectX's method of multithreading, as NVidia has gotten very large increases from it.
It's difficult to compare Mantle with DX11 multithreading though, as Mantle does significantly more than just reducing CPU bottlenecks. Whilst most of the performance increase gained by using Mantle comes from reductions in CPU overhead, some of it I think also comes from exposing more of the GPU's capabilities.
It will be really interesting to see whether Microsoft introduces a new DirectX with Windows 9, and whether they will keep the current multithreading model which puts the burden on the GPU driver, or go the Mantle route by putting the burden on the API itself.