struct S { float4 pos : SV_Position; float2 clip[2] : SV_ClipDistance0; }; [maxvertexcount(3)] void main(triangle in float4 pos[3] : SV_Position, triangle in uint VertexID[3] : VertexID, inout LineStream OutputStream, triangle in float2 clip[3][2] : SV_ClipDistance) // externally: an array 3 of array 4 of float. { S s; s.pos = pos[0]; s.clip[0] = clip[0][0]; s.clip[1] = clip[0][1]; OutputStream.Append(s); }