By using this site, you agree to our Privacy Policy and our Terms of Use. Close

Forums - Microsoft - Revealing the power of DirectX 11.

http://anandtech.com/video/showdoc.aspx?i=3507&p=1

Seriously is a big and in-depth article, I cannot sum this up so you may as well clicky if you're interested. Some of this applies to the Xbox 360 though most of it is really about the future direction of the computing industry. Of mucho importance are the compute shaders and the tessellators because the former brings general purpose computing to the GPU and the latter gives a mucho performance increase and is a feature of the Xenos GPU.

This is DirectX 10:

This is DirectX 11:



Tease.

Around the Network

without reading the long article,

I wonder if a DX10 card will be capable of DX11 or will I require another upgrade dammit.

Also fingers crossed DX11 will work on XP.



 

 

Squil, nice find.  If you don't mind I would like to paste some more stuff from the article.

"While changes in the pipeline allow developers to write programs to accomplish different types of tasks, these more subtle changes allow those programs to be more complex, higher quality, and/or more performant. Beyond all this, Microsoft has also gone out of its way to help make parallel programming a little bit easier for game developers."

"The bottom line is that while DirectX 10 promised features that could bring a revolution in visual fidelity and rendering techniques, DirectX 11 may actually deliver the goods while helping developers make the API transition faster than we've seen in the past. We might not see techniques that take advantage of the exclusive DirectX 11 features right off the bat, but adoption of the new version of the API itself will go a long way to inspiring amazing advances in realtime 3D graphics."

"

We are especially hopeful about a faster shift to DX11 because of the added advantages it will bring even to DX10 hardware. The major benefit I'm talking about here is multi-threading. Yes, eventually everything will need to be drawn rasterized and displayed (linearly and synchronously), but DX11 adds multi-threading support that allows applications to simultaneously create resources or manage state and issue draw commands all from an arbitrary number of threads. This may not significantly speed up the graphics subsystem (especially if we are already very GPU limited), but this does increase the ability to more easily explicitly massively thread a game and take advantage of the increasing number of CPU cores on the desktop.

With 8 and 16 logical processor systems coming soon to a system near you, we need developers to push beyond the very coarse grained and heavy threads they are currently using that run well on two core systems. The cost/benefit of developing a game that is significantly assisted by the availability of more than 2 cores is very poor at this point. It is too difficult to extract enough parallelism to matter on quad core and beyond in most video games. But enabling simple parallel creation of resources and display lists by multiple threads could really open up opportunities for parallelizing game code that would otherwise have remained single threaded. Rather than one thread to handle all the DX state change and draw calls (or very well behaved and heavily synchronized threads sharing the responsibility), developers can more naturally create threads to manage types or groups of objects or parts of a world, opening up the path to the future where every object or entity can be managed by it's own thread (which would be necessary to extract performance when we eventually expand into hundreds of logical cores).

The fact that Microsoft has planned multi-threading support for DX11 games running on DX10 hardware is a major bonus. The only caveat here is that AMD and NVIDIA will need to do a little driver work for their existing DX10 hardware to make this work to its fullest extent (it will "work" but not as well even without a driver change). Of course, we expect that NVIDIA and especially AMD (as they are also a multi-core CPU company) will be very interested in making this happen. And, again, this provides major incentives for game developers to target DX11 even before DX11 hardware is widely available or deployed."

"

Drilling Down: DX11 And The Multi-Threaded Game Engine

In spite of the fact that multithreaded programming has been around for decades, mainstream programmers didn't start focusing on parallel programming until multicore CPUs started coming along. Much general purpose code is straight forward as a single thread; extracting performance via parallel programming can be difficult and isn't always obvious. Even with talented programmers, Amdahls Law is a bitch: your speed up from parallelization is limited by the percent of code that is necessarily sequential.

Currently, in game development, rendering is one of those "necessarily" sequential tasks. DirectX 10 isn't set up to appropriately handle multiple threads all throwing commands at the GPU. That doesn't mean parallelization of renders can't happen, but it does limit speed up because costly synchronization techniques or management threads need to be implemented in order to make sure nothing steps out of line. All this limits the benefit of parallelization and discourages programmers from trying too hard. After all, its a better idea to put more of your effort into areas where performance can be improved more significantly. John Carmack put it really well once, but I can't remember the quote. And I'm doing too much benchmarking to go look for it now.

No matter what anyone does, some stuff in the renderer will need to be sequential. Programs, textures and resources must be loaded up, geometry happens before pixel processing, draw calls intended to be executed while a certain state is active must have that state set first and not changed until completion. Even in such a massively parallel machine, order must be maintained for many things. But order doesn't /always/ matter.

Making more things thread-safe through an extended device interface using multiple contexts and making a lot of synchronization overhead the responsibility of the API and/or graphics driver, Microsoft has enabled game developers to more easily and effortlessly thread not only their rendering code, but their game code as well. These things will also work on DX10 hardware running on a system with DX11, though some missing hardware optimizations will reduce the performance benefit. But the fundamental ability to write code differently will go a long way to getting programmers more used to and better at parallelization. Let's take a look at the tools available to accomplish this in DX11.

First up is free threaded asynchronous resource loading. That's a bit of a mouthful, but this feature gives developers the ability to upload programs, textures, state objects, and all resources in a thread-safe way and, if desired, concurrent with the rendering process. This doesn't mean that all this stuff will get pushed up in parallel with rendering, as the driver will manage what gets sent to the GPU and when based on priority, but it does mean the developer no longer has to think about synchronizing or manually prioritizing resource loading. Multiple threads can start loading whatever resources the need whenever they need them. The fact that this can also be done concurrently with rendering could improve performance for games that stream in data for massive open worlds in addition to enabling multithreaded opportunities.

In order to enable this and other threading, the D3D device interface is now split into three separate interfaces: the Device, the Immediate Context, and the Deferred Context. Resource creation is done through the Device. The Immediate Context is the interface for setting device state, draw calls, and queries. There can only be one Device and one Immediate Context. The Deferred Context is another interface for state and draw calls, but many can exist in one program and can be used as the per-thread interface (Deferred Contexts themselves are thread unsafe though). Deferred Contexts and the free threaded resource creation through the device are where DX11 gets it multithreaded benefit.

Multiple threads submit state and draw calls to their Deferred Context which complies a display list that is eventually executed by the Immediate Context. Games will still need a render thread, and this thread will use the Immediate Context to execute state and draw calls and to consume the display lists generated by Deferred Contexts. In this way, the ultimate destination of all state and draw calls is the Immediate Context, but fine grained synchronization is handled by the API and the display driver so that parallel threads can be better used to contribute to the rendering process. Some limitations on Deferred Contexts include the fact that they cannot query the device and they can't download or read back anything from the GPU. Deferred Contexts can, however, consume the display lists generated by other Deferred Contexts.

The end result of all this is that the future will be more parallel friendly. As two and four core CPUs become more and more popular and 8 and 16 (logical) core CPUs are on the horizon we need all the help we can get when trying to extract performance from parallelism. This is a good move for DirectX and we hope it will help push game engines to more fully utilize more than 2 or even 4 cores when the time comes."

_______________________________________________________________

Hell yeah for easier multi-threading.

------------------------------------------------------------------------------------------------

"The tessellator can take coarse shapes and break them up into smaller parts. It can also take these smaller parts and reshape them to form geometry that is much more complex and that more closely approximates reality. It can take a cube and turn it into a sphere with very little overhead and much fewer space requirements. Quality, performance and manageability benefit."

___________________________________________________________________

Hell yeah for tessellation.

 

 

 



Thats a pretty good summary, thanks!

Shameless bump too...



Tease.

The technology definitely looks promising, especially with the new generation of GPUs. Seems that more and more work is being offloaded onto the GPUs.



Good news Everyone!

I've invented a device which makes you read this in your head, in my voice!

Around the Network

Didn't directx10 Just come out 3 years ago?



And that's the only thing I need is *this*. I don't need this or this. Just this PS4... And this gaming PC. - The PS4 and the Gaming PC and that's all I need... And this Xbox 360. - The PS4, the Gaming PC, and the Xbox 360, and that's all I need... And these PS3's. - The PS4, and these PS3's, and the Gaming PC, and the Xbox 360... And this Nintendo DS. - The PS4, this Xbox 360, and the Gaming PC, and the PS3's, and that's all *I* need. And that's *all* I need too. I don't need one other thing, not one... I need this. - The Gaming PC and PS4, and Xbox 360, and thePS3's . Well what are you looking at? What do you think I'm some kind of a jerk or something! - And this. That's all I need.

Obligatory dick measuring Gaming Laptop Specs: Sager NP8270-GTX: 17.3" FULL HD (1920X1080) LED Matte LC, nVIDIA GeForce GTX 780M, Intel Core i7-4700MQ, 16GB (2x8GB) DDR3, 750GB SATA II 3GB/s 7,200 RPM Hard Drive

Cool. Great thread.



"Let justice be done though the heavens fall." - Jim Garrison

"Ask not your horse, if ye should ride into battle" - myself

Cobretti2 said:
without reading the long article,

I wonder if a DX10 card will be capable of DX11 or will I require another upgrade dammit.

Also fingers crossed DX11 will work on XP.

I don't know, but I think with 7 comes out you'll want to upgrade... it's f'n awesome.

 



Great improvement for doing more in less time.