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