• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2023 Advanced Micro Devices, Inc.
3  * SPDX-License-Identifier: MIT
4  */
5 
6 #ifndef AC_HW_STAGE_H
7 #define AC_HW_STAGE_H
8 
9 /**
10  * Shader stages as understood by AMD HW.
11  *
12  * Every HW generation has a dedicated stage for compute and PS,
13  * but it varies greatly over other geometry processing stages.
14  *
15  * Valid graphics shader configurations:
16  * (-> = merged with the next stage)
17  *
18  * -------------------------|-----|-----|----|----|----
19  * API shaders:          VS | TCS | TES | GS |copy| FS
20  * Are compiled as:         |     |     |    |    |
21  * GFX6-8 ------------------|-----|-----|----|----|----
22  *          - VS & PS:   VS |     |     |    |    | PS
23  *          - with GS:   ES |     |     | GS | VS | PS
24  *          - with tess: LS | HS  | VS  |    |    | PS
25  *          - with both: LS | HS  | ES  | GS | VS | PS
26  * GFX9-10.3/legacy --------|-----|-----|----|----|----
27  *          - VS & PS:   VS |     |     |    |    | PS
28  *          - with GS:   -> |     |     | GS | VS | PS
29  *          - with tess: -> | HS  | VS  |    |    | PS
30  *          - with both: -> | HS  | ->  | GS | VS | PS
31  * GFX10+/NGG --------------|-----|-----|----|----|----
32  *          - VS & PS:   GS |     |     |    |    | PS
33  *          - with GS:   -> |     |     | GS |    | PS
34  *          - with tess: -> | HS  | GS  |    |    | PS
35  *          - with both: -> | HS  | ->  | GS |    | PS
36  * -------------------------|-----|-----|----|----|----
37  *
38  * Valid mesh shading graphics pipeline configurations:
39  *
40  * -------------------------------|---------------|----
41  * API shaders:                TS |            MS | FS
42  * Are compiled as:               |               |
43  * GFX10.3+/NGG ------------------|---------------|----
44  *        - mesh only:            |            GS | PS
45  *        - task & mesh:       CS |            GS | PS
46  * -------------------------------|---------------|----
47  *
48  */
49 enum ac_hw_stage
50 {
51    /* GFX6-8 only, merged into HS on GFX9+:
52     *    - vertex shader (when tess is used)
53     */
54    AC_HW_LOCAL_SHADER,
55 
56    /* GFX6-8:
57     *    - tess control shader
58     *
59     * GFX9+:
60     * Also known as surface shader.
61     *    - merged vertex and tess control shader
62     */
63    AC_HW_HULL_SHADER,
64 
65    /* GFX6-8 only, merged into GS on GFX9+:
66     *    - vertex shader before GS (when tess is not used)
67     *    - tess eval shader before GS (when tess is used)
68     */
69    AC_HW_EXPORT_SHADER,
70 
71    /* GFX6-8:
72     *    - geometry shader
73     * GFX9-10/legacy:
74     *    - merged vertex + geometry (when tess is not used)
75     *    - merged tess eval + geometry (when tess is used)
76     */
77    AC_HW_LEGACY_GEOMETRY_SHADER,
78 
79    /* GFX6-10/legacy only:
80     *    - vertex shader (when tess and GS are not used)
81     *    - tess eval shader (when GS is not used),
82     *    - "GS copy" shader (always when GS is used)
83     */
84    AC_HW_VERTEX_SHADER,
85 
86    /* GFX10+/NGG:
87     * All pre-rasterization stages (after tess). Also known as primitive shader.
88     *    - vertex shader (when tess and GS are not used)
89     *    - tess eval shader (when GS is not used)
90     *    - merged vertex + geometry shader (when GS is used but tess is not)
91     *    - merged tess eval + geometry shader (when both tess and GS are used)
92     *    - mesh shader
93     */
94    AC_HW_NEXT_GEN_GEOMETRY_SHADER,
95 
96    /* Fragment shader.
97     * Call it "pixel shader" because that is how HW docs call it.
98     */
99    AC_HW_PIXEL_SHADER,
100 
101    /* Compute and compute-like shaders, such as task shader and ray tracing. */
102    AC_HW_COMPUTE_SHADER,
103 };
104 
105 #endif
106