From cc2307008a345fbbacefcbaa69699c93deaea8fe Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Timur=20Krist=C3=B3f?= Date: Sat, 22 Apr 2023 16:32:14 +0200 Subject: [PATCH] ac: Add ac_hw_stage enum. MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This is going to be shared between RADV, RadeonSI and ACO. Signed-off-by: Timur Kristóf Reviewed-by: Qiang Yu Reviewed-by: Daniel Schürmann Part-of: --- src/amd/common/ac_shader_util.h | 96 +++++++++++++++++++++++++++++++++ 1 file changed, 96 insertions(+) diff --git a/src/amd/common/ac_shader_util.h b/src/amd/common/ac_shader_util.h index 01f816378ca..ff144ae295c 100644 --- a/src/amd/common/ac_shader_util.h +++ b/src/amd/common/ac_shader_util.h @@ -141,6 +141,102 @@ enum ac_descriptor_type AC_DESC_PLANE_2, }; +/** + * Shader stages as understood by AMD HW. + * + * Every HW generation has a dedicated stage for compute and PS, + * but it varies greatly over other geometry processing stages. + * + * Valid graphics shader configurations: + * (-> = merged with the next stage) + * + * -------------------------|-----|-----|----|----|---- + * API shaders: VS | TCS | TES | GS |copy| FS + * Are compiled as: | | | | | + * GFX6-8 ------------------|-----|-----|----|----|---- + * - VS & PS: VS | | | | | PS + * - with GS: ES | | | GS | VS | PS + * - with tess: LS | HS | VS | | | PS + * - with both: LS | HS | ES | GS | VS | PS + * GFX9-10.3/legacy --------|-----|-----|----|----|---- + * - VS & PS: VS | | | | | PS + * - with GS: -> | | | GS | VS | PS + * - with tess: -> | HS | VS | | | PS + * - with both: -> | HS | -> | GS | VS | PS + * GFX10+/NGG --------------|-----|-----|----|----|---- + * - VS & PS: GS | | | | | PS + * - with GS: -> | | | GS | | PS + * - with tess: -> | HS | GS | | | PS + * - with both: -> | HS | -> | GS | | PS + * -------------------------|-----|-----|----|----|---- + * + * Valid mesh shading graphics pipeline configurations: + * + * -------------------------------|---------------|---- + * API shaders: TS | MS | FS + * Are compiled as: | | + * GFX10.3+/NGG ------------------|---------------|---- + * - mesh only: | GS | PS + * - task & mesh: CS | GS | PS + * -------------------------------|---------------|---- + * + */ +enum ac_hw_stage +{ + /* GFX6-8 only, merged into HS on GFX9+: + * - vertex shader (when tess is used) + */ + AC_HW_LOCAL_SHADER, + + /* GFX6-8: + * - tess control shader + * + * GFX9+: + * Also known as surface shader. + * - merged vertex and tess control shader + */ + AC_HW_HULL_SHADER, + + /* GFX6-8 only, merged into GS on GFX9+: + * - vertex shader before GS (when tess is not used) + * - tess eval shader before GS (when tess is used) + */ + AC_HW_EXPORT_SHADER, + + /* GFX6-8: + * - geometry shader + * GFX9-10/legacy: + * - merged vertex + geometry (when tess is not used) + * - merged tess eval + geometry (when tess is used) + */ + AC_HW_LEGACY_GEOMETRY_SHADER, + + /* GFX6-10/legacy only: + * - vertex shader (when tess and GS are not used) + * - tess eval shader (when GS is not used), + * - "GS copy" shader (always when GS is used) + */ + AC_HW_VERTEX_SHADER, + + /* GFX10+/NGG: + * All pre-rasterization stages (after tess). Also known as primitive shader. + * - vertex shader (when tess and GS are not used) + * - tess eval shader (when GS is not used) + * - merged vertex + geometry shader (when GS is used but tess is not) + * - merged tess eval + geometry shader (when both tess and GS are used) + * - mesh shader + */ + AC_HW_NEXT_GEN_GEOMETRY_SHADER, + + /* Fragment shader. + * Call it "pixel shader" because that is how HW docs call it. + */ + AC_HW_PIXEL_SHADER, + + /* Compute and compute-like shaders, such as task shader and ray tracing. */ + AC_HW_COMPUTE_SHADER, +}; + unsigned ac_get_spi_shader_z_format(bool writes_z, bool writes_stencil, bool writes_samplemask, bool writes_mrt0_alpha);