The Hull Shader is where the process of tessellating an object is set up – it takes control points for a patch and then calculates the level of tessellation required. After the basis conversion, the control points are then forwarded onto the Domain Shader – the tessellator isn’t aware of the control points.
Instead, the tessellator is fed a number of TessFactors that essentially tell the tessellator the level of tessellation required on a particular patch. The Hull Shader also tells the tessellator what mode it should operate in – the developer will be able to specify the way that the tessellation process is completed because, although the tessellation unit is fixed-function, there are a few operating modes.
The tessellator then takes what is fed to it by the Hull Shader and then works in patches to create the additional geometry required. Once this is complete, it outputs the domain points and topology data.
The domain points are passed down into the Domain Shader, which works on a per-point basis, taking the domain points and creating vertices that can be understood by the rest of the pipeline. Meanwhile, the topology data goes straight down to the primitive assembly stage of the pipeline – the reason for this is that this data isn’t needed by the shaders, but it is by the rasteriser.
Click to enlarge
It’s important to note here that the whole tessellation stage of the pipeline doesn’t work with triangles; instead, it works with patches and points. Patches represent curves or regions of a surface and are commonly represented as quads. Of course, patches can be represented with triangles, but that’s going to be less common because most 3D authoring applications work with quads. This is the first time that DirectX has worked without
triangles, so it’s quite a massive step forwards.
All of what I’ve described above is completed in a single pass through the DX11 pipeline, so it has the potential to be an incredibly efficient way to add much more detail into future games. Of course, developers don’t have to use this stage of the pipeline if they don’t want to – tessellation can be completely bypassed if it is not required.