Module: Mesa Branch: master Commit: f65182931dbcae545034ae7230bbcdcfea7d91da URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=f65182931dbcae545034ae7230bbcdcfea7d91da
Author: Caio Marcelo de Oliveira Filho <[email protected]> Date: Wed Feb 19 10:14:10 2020 -0800 compiler: Add new Vulkan shader stages This particular ordering makes them conveniently match VkShaderStageFlagBits, which is a property we already take advantage of in the previous shader stages. Abbreviations are based on the ones used in glslangValidator. Reviewed-by: Jason Ekstrand <[email protected]> Reviewed-by: Bas Nieuwenhuizen <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6479> --- src/compiler/shader_enums.c | 24 ++++++++++++++++++++++++ src/compiler/shader_enums.h | 18 +++++++++++++++++- src/gallium/drivers/freedreno/a6xx/fd6_program.c | 9 +++++++++ src/mesa/main/shaderobj.h | 15 +++++---------- 4 files changed, 55 insertions(+), 11 deletions(-) diff --git a/src/compiler/shader_enums.c b/src/compiler/shader_enums.c index 0e28c5585c4..ccea8692833 100644 --- a/src/compiler/shader_enums.c +++ b/src/compiler/shader_enums.c @@ -43,6 +43,14 @@ gl_shader_stage_name(gl_shader_stage stage) ENUM(MESA_SHADER_GEOMETRY), ENUM(MESA_SHADER_FRAGMENT), ENUM(MESA_SHADER_COMPUTE), + ENUM(MESA_SHADER_TASK), + ENUM(MESA_SHADER_MESH), + ENUM(MESA_SHADER_RAYGEN), + ENUM(MESA_SHADER_ANY_HIT), + ENUM(MESA_SHADER_CLOSEST_HIT), + ENUM(MESA_SHADER_MISS), + ENUM(MESA_SHADER_INTERSECTION), + ENUM(MESA_SHADER_CALLABLE), ENUM(MESA_SHADER_KERNEL), }; STATIC_ASSERT(ARRAY_SIZE(names) == MESA_ALL_SHADER_STAGES); @@ -64,6 +72,14 @@ _mesa_shader_stage_to_string(unsigned stage) case MESA_SHADER_KERNEL: return "kernel"; case MESA_SHADER_TESS_CTRL: return "tessellation control"; case MESA_SHADER_TESS_EVAL: return "tessellation evaluation"; + case MESA_SHADER_TASK: return "task"; + case MESA_SHADER_MESH: return "mesh"; + case MESA_SHADER_RAYGEN: return "raygen"; + case MESA_SHADER_ANY_HIT: return "any hit"; + case MESA_SHADER_CLOSEST_HIT: return "closest hit"; + case MESA_SHADER_MISS: return "miss"; + case MESA_SHADER_INTERSECTION: return "intersection"; + case MESA_SHADER_CALLABLE: return "callable"; } unreachable("Unknown shader stage."); @@ -84,6 +100,14 @@ _mesa_shader_stage_to_abbrev(unsigned stage) case MESA_SHADER_KERNEL: return "CL"; case MESA_SHADER_TESS_CTRL: return "TCS"; case MESA_SHADER_TESS_EVAL: return "TES"; + case MESA_SHADER_TASK: return "TASK"; + case MESA_SHADER_MESH: return "MESH"; + case MESA_SHADER_RAYGEN: return "RGEN"; + case MESA_SHADER_ANY_HIT: return "RAHIT"; + case MESA_SHADER_CLOSEST_HIT: return "RCHIT"; + case MESA_SHADER_MISS: return "RMISS"; + case MESA_SHADER_INTERSECTION: return "RINT"; + case MESA_SHADER_CALLABLE: return "RCALL"; } unreachable("Unknown shader stage."); diff --git a/src/compiler/shader_enums.h b/src/compiler/shader_enums.h index 9a04487e268..ced516ff57f 100644 --- a/src/compiler/shader_enums.h +++ b/src/compiler/shader_enums.h @@ -51,8 +51,19 @@ typedef enum MESA_SHADER_GEOMETRY = 3, MESA_SHADER_FRAGMENT = 4, MESA_SHADER_COMPUTE = 5, + + /* Vulkan-only stages. */ + MESA_SHADER_TASK = 6, + MESA_SHADER_MESH = 7, + MESA_SHADER_RAYGEN = 8, + MESA_SHADER_ANY_HIT = 9, + MESA_SHADER_CLOSEST_HIT = 10, + MESA_SHADER_MISS = 11, + MESA_SHADER_INTERSECTION = 12, + MESA_SHADER_CALLABLE = 13, + /* must be last so it doesn't affect the GL pipeline */ - MESA_SHADER_KERNEL = 6, + MESA_SHADER_KERNEL = 14, } gl_shader_stage; static inline bool @@ -88,6 +99,11 @@ const char *_mesa_shader_stage_to_abbrev(unsigned stage); */ #define MESA_SHADER_STAGES (MESA_SHADER_COMPUTE + 1) +/** + * Vulkan stages (not including CL) + */ +#define MESA_VULKAN_SHADER_STAGES (MESA_SHADER_CALLABLE + 1) + /** * All stages */ diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_program.c b/src/gallium/drivers/freedreno/a6xx/fd6_program.c index 2eff56f918d..64690c99c1b 100644 --- a/src/gallium/drivers/freedreno/a6xx/fd6_program.c +++ b/src/gallium/drivers/freedreno/a6xx/fd6_program.c @@ -75,6 +75,15 @@ fd6_emit_shader(struct fd_ringbuffer *ring, const struct ir3_shader_variant *so) obj_start = REG_A6XX_SP_CS_OBJ_START_LO; instrlen = REG_A6XX_SP_CS_INSTRLEN; break; + case MESA_SHADER_TASK: + case MESA_SHADER_MESH: + case MESA_SHADER_RAYGEN: + case MESA_SHADER_ANY_HIT: + case MESA_SHADER_CLOSEST_HIT: + case MESA_SHADER_MISS: + case MESA_SHADER_INTERSECTION: + case MESA_SHADER_CALLABLE: + unreachable("Unsupported shader stage"); case MESA_SHADER_NONE: unreachable(""); } diff --git a/src/mesa/main/shaderobj.h b/src/mesa/main/shaderobj.h index 0d512550de4..bb1b300e87c 100644 --- a/src/mesa/main/shaderobj.h +++ b/src/mesa/main/shaderobj.h @@ -203,8 +203,9 @@ _mesa_shader_stage_from_subroutine(GLenum subroutine) return MESA_SHADER_TESS_CTRL; case GL_TESS_EVALUATION_SUBROUTINE: return MESA_SHADER_TESS_EVAL; + default: + unreachable("not reached"); } - unreachable("not reached"); } static inline GLenum @@ -223,13 +224,9 @@ _mesa_shader_stage_to_subroutine(gl_shader_stage stage) return GL_TESS_CONTROL_SUBROUTINE; case MESA_SHADER_TESS_EVAL: return GL_TESS_EVALUATION_SUBROUTINE; - case MESA_SHADER_NONE: - break; - case MESA_SHADER_KERNEL: + default: unreachable("not reached"); - break; } - unreachable("not reached"); } static inline GLenum @@ -248,11 +245,9 @@ _mesa_shader_stage_to_subroutine_uniform(gl_shader_stage stage) return GL_TESS_CONTROL_SUBROUTINE_UNIFORM; case MESA_SHADER_TESS_EVAL: return GL_TESS_EVALUATION_SUBROUTINE_UNIFORM; - case MESA_SHADER_NONE: - case MESA_SHADER_KERNEL: - break; + default: + unreachable("not reached"); } - unreachable("not reached"); } extern bool _______________________________________________ mesa-commit mailing list [email protected] https://lists.freedesktop.org/mailman/listinfo/mesa-commit
