1// *** 2// per-control-point invocation of PCF from entry point return value 3// *** 4 5struct hs_in_t 6{ 7 float3 val : TEXCOORD0; 8}; 9 10struct hs_pcf_t 11{ 12 float tfactor[3] : SV_TessFactor; // must turn into a size 4 array in SPIR-V 13 float flInFactor : SV_InsideTessFactor; // must turn into a size 2 array in SPIR-V 14}; 15 16struct hs_out_t 17{ 18 float3 val : TEXCOORD0; 19}; 20 21[ domain ("tri") ] 22[ partitioning ("fractional_odd") ] 23[ outputtopology ("triangle_cw") ] 24[ outputcontrolpoints (3) ] 25[ patchconstantfunc ( "PCF" ) ] 26hs_out_t main (InputPatch <hs_in_t, 3> i , uint cpid : SV_OutputControlPointID) 27{ 28 hs_out_t o; 29 o.val = cpid; 30 return o; 31} 32 33hs_pcf_t PCF( const OutputPatch <hs_out_t, 3> pcf_out) 34{ 35 hs_pcf_t o; 36 37 o.tfactor[0] = pcf_out[0].val.x; 38 o.tfactor[1] = pcf_out[1].val.x; 39 o.tfactor[2] = pcf_out[2].val.x; 40 o.flInFactor = 4; 41 42 return o; 43} 44