Here is a fixed version that has correct depth output and writes some other values that the pixel shader might need. you could think of adding tangents, if you want to use normal maps.
it also outputs one strip, and not individual triangles, which reduces the vertex output count.
That is important for the shader output limit, it is 1024 32-bit values. so the amount of vertices you can emit is 1024/vertexstride. That can vary, depending on what the pixel shader needs. you can set all stream values in the geometry shader and depending on the material features, your max count will be limited as the output datatype will be dynamically compiled.
Have you considered using geometry shader instancing? Assuming you are using D3D11 hardware, you can simply execute multiple copies of the geometry shader for each primitive. Then you can process one half of your data in one instance and the other half in the second instance - you would then just need to use the SV_GSInstanceID system value semantic in the shader to select the proper subset of data to produce. You can have up to 32 instances created for each primitive, so you could effectively up the limit to 1024*32.
you can add an [instance(N)] attribute, where N is a number between 1 and 32. And then use SV_GSInstanceID to emit more vertices. But not 100% sure if the SDSL parser knows about that. I’ve never tried it.
Looks great, they only seem to be missing setting the depth value, I’d recommend using the AppendVertex() method for them as well to be sure that all vertex shader variables are set…