Thank you @MJP. That make sense. And actually documentation says that though I had to read it several times to understand.
@Matias is it still true if I have a pass-through vertex shader?
And maybe you can help me with my scenario. I have a big buffer with all control points. A have several index buffers for patches. Some patches should be drawn multiple times with different transformation. So if I want to draw everything in one call I have to duplicate indices. Right now I'm drawing each patch in it's own draw call and for patches that need to be drawn multiple times I'm using instancing. Here's a problem - for each new instance SV_PrimitiveID resets to 0. SV_InstanceID is not available in hull/domain shader and I have to pass it from vertex shader unnecessary duplicating data. Looks like instancing not works very well with tessellation.
Have you considered putting your control point data into a resource that can be read by a shader (i.e. constant buffer or a structured buffer)? That would allow you to have a very small vertex format (like a single integer offset) and you can just update your vertex buffer to indicate which set of control points you want each instance to use, and then utilize one of the basic draw calls instead of real instancing. That should keep your primitive ID sequential, while still offering the reuse of most of your data without bloating.
Also, maybe I missed it, but what are you using the primitive ID for? Is a unique value within the domain/hull shader needed?