// *** 
// invocation ID coming from input to entry point
// ***

struct VS_OUT
{
    float3 cpoint : CPOINT;
};

struct HS_CONSTANT_OUT
{
    float edges[2] : SV_TessFactor;
};

struct HS_OUT
{
    float3 cpoint : CPOINT;
};

[domain("isoline")]
[partitioning("integer")]
[outputtopology("line")]
[outputcontrolpoints(4)]
[patchconstantfunc("PCF")]
HS_OUT main(InputPatch<VS_OUT, 4> ip, uint m_cpid : SV_OutputControlPointID)
{
    HS_OUT output;
    output.cpoint = ip[0].cpoint;
    return output;
}

HS_CONSTANT_OUT PCF(uint pid : SV_PrimitiveId)
{
    HS_CONSTANT_OUT output;
    
    output.edges[0] = 2.0f;
    output.edges[1] = 8.0f;
    return output;
}