Diffuse light shader with indexed primitives

I need to use a triangle’s normal in a vertex shader using vs_3_0 & ps_3_0.
To save memory, I do not want every vertices to host the normal ( 3x same value per triangle + 3 new vertices per triangles)
Therefore, since I cannot access other vertices in the VS, I see 2 options :

1- Have a “normal buffer” and use the primitive’s ID to get the proper normal.
2- Ask Monogame community how normal people do that.

I have tried to do the first option, but I cannot find which semantics are available and SV_PrimitiveID returns 0; Where can I find HLSL version documentation other than microsoft docs ?

How I declared it:
uint primitiveNb : SV_VertexID;

Also, using a “normal buffer” means calculating the normals on CPU and updating for every transformation; Can I move the code to GPU ?

Please share any Monogame Shader/ HLSL Documentation I could use in the future !

You realize If you were to do this you wouldn’t be able to use vertice lighting properly.
I believe the only use i could see for this is flat shaded polygons.

Either way in this case why pass a normal at all…Compute it in a (vertex) shader.
Though depending on your case that might not be a option.

To save memory

Is this a real problem that you are actually running out of memory on your card ?