1
votes

This question is when using DirectX 11.

I have a bunch of geometry that is in the form of triangle lists. I can render them with just a vertex shader and a pixel shader without issues.

If I add a hull shader, a domain shader and a geometry shader to the pipeline (compile the shaders and bind them to the render context) the triangles still render however I don't believe my hull shader or domain shader or geometry shader are being called.

So my question is, will the hull shader, domain shader and geometry shader be called if the primitive type is a triangle list? I've only found examples of tessellation using control point patch lists. Does tessellation work with triangle lists?

1

1 Answers

1
votes

When the primitive type is D3D11_PRIMITIVE_TOPOLOGY_TRIANGLELIST the hull shader, domain shader and geometry shader are not called. (Just the vertex shader and pixel shader.) According to Microsoft Documentation you must use a patch primitive.

Once tessellation is enabled, the data input to the input-assembler stage must be patch data.

For triangle lists you can switch the primitive to D3D11_PRIMITIVE_TOPOLOGY_3_CONTROL_POINT_PATCHLIST and it works. (Assuming you have bound your hull, domain and geometry shader.) (For triangle strips there doesn't seem to be a simple solution.)