D3D11 Pipeline - In Depth...
I haven't had too much time lately to come around, and haven't really posted much in this journal. I have been keeping a fairly strict schedule of working on our book, but decided to take a bit of a break get some info into the journal. Over the past two weeks I have been studying the D3D11 rendering pipeline in great detail, and while it has been somewhat exhausting it has also been extremely interesting. It seems that regardless of how much you think you know about the pipeline, there is additional details floating about that are quite hard to find.
The most interesting bits that I've been looking into lately are the system values and where/when they are available. Some of the system values have been around for a while (such as the clip and cull system values) and some have new meanings in D3D11 (like the primitive ID in a Hull shader), while still others are completely new for D3D11 (all of the compute shader SVs, plus the tessellation related ones). All together, the system values contribute a significant amount of information that can be used by your algorithms without spending really any effort to get it - it just works.
In particular, when authoring algorithms that make use of the system values, there have been several times when I have replaced existing operations from older shaders with some new system values. Getting the pixel location in a Pixel Shader with SV_Position is a prime example - you don't have to worry about adding the 0.5 shift or anything like that anymore. You can just pop the system value in and use it.
I'm trying to encapsulate as much information about the system values as well as the other forms of communication between stages (i.e. regular attributes) into the book as I can - it is an integral part of using the pipeline, and I hope to shed as much light on the topic as possible...
I'm heading back to writing, but I'll peek my head back in soon with another progress update [grin]!