D3D12 Logical Pipeline: VS (Vertex Shader) -> HS (Hull Shader) -> DS (Domain Shader) -> GS (Geometry Shader)
GFX6-8 Hardware Pipeline: LS (LDS? shader) -> HS (Hull Shader) -> ES (Export Shader) -> GS (Geometry Shader) -> VS (Vertex Shader)
Logical -> Hardware mapping
(VS only): VS -> VS
(Tess enabled): VS -> LS | HS -> HS | DS -> VS
(GS enabled): VS -> ES | GS -> GS
(Both enabled): VS-> LS | HS -> HS | DS -> ES | GS -> GS
GFX9 Hardware Pipeline: HS (merged LS & HS) -> GS (merged ES & GS) -> VS
Logical -> Hardware mapping
(VS only): VS -> VS
(Tess enabled): VS + HS -> HS | DS -> VS
(GS enabled): VS + GS -> GS
(Both enabled): VS + HS -> HS | DS + GS -> GS
GFX10 Hardware Pipeline: HS -> GS (merged ES, GS & VS)
Logical -> Hardware mapping
(VS only): VS -> GS
(Tess enabled): VS + HS -> HS | DS -> GS
(GS enabled): VS + GS -> GS
(Both enabled): VS + HS -> HS | DS + GS -> GS
D3D12 Mesh Shading Pipeline: AS (Amplification Shader) -> MS (Mesh Shader)
Mesh Pipeline -> GFX10 Hardware mapping: AS -> CS (Compute Shader) | MS -> GS
Hopefully this clears things up a bit. Now for some interesting notes:
Despite our mental model of the vertex shader being executed at the very start of our logical pipeline, the vertex program itself can executed on 3 different HW stages on older AMD HW. I imagine the reason for this HW pipeline design where the HW's vertex shader is located at the end of the geometry pipeline is so the HW can avoid the additional overhead from tessellation and geometry shader stages in certain cases.
As we can identify in the comments from AMD's code, amplification shaders don't map onto anything in their graphics pipeline and mesh shaders are executed on GFX10's NGG geometry shaders.
Sources and code:
https://cgit.freedesktop.org/mesa/m...68957a82562d13b3f0d21a04ce633ffd236e6036#n165
https://github.com/GPUOpen-Drivers/pal/blob/dev/src/core/hw/gfxip/gfx6/gfx6GraphicsPipeline.cpp#L536
https://github.com/GPUOpen-Drivers/pal/blob/dev/src/core/hw/gfxip/gfx9/gfx9GraphicsPipeline.cpp#L569
https://github.com/GPUOpen-Drivers/.../gfxip/gfx9/gfx9IndirectCmdGenerator.cpp#L174