From 72a43c76c2b22764cc1503698e9b6b7a22c66711 Mon Sep 17 00:00:00 2001 From: Caleb Callaway Date: Tue, 29 Jul 2025 17:59:45 +0000 Subject: [PATCH] compiler: auto-stage file ext for SPIR-V capture Reviewed-by: Natalie Vock Part-of: --- src/compiler/shader_enums.c | 27 +++++++++++++++++++++++++++ src/compiler/shader_enums.h | 9 ++++++++- src/compiler/spirv/spirv_to_nir.c | 5 +++-- 3 files changed, 38 insertions(+), 3 deletions(-) diff --git a/src/compiler/shader_enums.c b/src/compiler/shader_enums.c index a128b699fcc..7d8bced137b 100644 --- a/src/compiler/shader_enums.c +++ b/src/compiler/shader_enums.c @@ -113,6 +113,33 @@ _mesa_shader_stage_to_abbrev(unsigned stage) UNREACHABLE("Unknown shader stage."); } +/** + * Translate a gl_shader_stage to a shader stage file extension + * that's easily consumed by glslang. + */ +const char * +_mesa_shader_stage_to_file_ext(unsigned stage) +{ + switch (stage) { + case MESA_SHADER_VERTEX: return "vert"; + case MESA_SHADER_FRAGMENT: return "frag"; + case MESA_SHADER_GEOMETRY: return "geom"; + case MESA_SHADER_COMPUTE: return "comp"; + case MESA_SHADER_TESS_CTRL: return "tesc"; + case MESA_SHADER_TESS_EVAL: return "tese"; + 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."); +} + const char * gl_vert_attrib_name(gl_vert_attrib attrib) { diff --git a/src/compiler/shader_enums.h b/src/compiler/shader_enums.h index 024ec73256d..528bf775e98 100644 --- a/src/compiler/shader_enums.h +++ b/src/compiler/shader_enums.h @@ -163,6 +163,13 @@ const char *_mesa_shader_stage_to_string(unsigned stage); */ const char *_mesa_shader_stage_to_abbrev(unsigned stage); + +/** + * Translate a gl_shader_stage to a shader stage file extension + * that's easily consumed by glslang. + */ +const char *_mesa_shader_stage_to_file_ext(unsigned stage); + /** * GL related stages (not including CL) */ @@ -1530,7 +1537,7 @@ enum float_controls FLOAT_CONTROLS_SIGNED_ZERO_PRESERVE_FP64 | FLOAT_CONTROLS_INF_PRESERVE_FP64 | FLOAT_CONTROLS_NAN_PRESERVE_FP64, - + FLOAT_CONTROLS_SIGNED_ZERO_PRESERVE = FLOAT_CONTROLS_SIGNED_ZERO_PRESERVE_FP16 | FLOAT_CONTROLS_SIGNED_ZERO_PRESERVE_FP32 | diff --git a/src/compiler/spirv/spirv_to_nir.c b/src/compiler/spirv/spirv_to_nir.c index 5b0e93cfafc..0cb08216f31 100644 --- a/src/compiler/spirv/spirv_to_nir.c +++ b/src/compiler/spirv/spirv_to_nir.c @@ -346,8 +346,9 @@ static void vtn_dump_shader(struct vtn_builder *b, const char *path, const char *name) { char filename[PATH_MAX]; - int len = snprintf(filename, sizeof(filename), "%s/0x%s.spirv", - path, name); + const char* stage_ext = _mesa_shader_stage_to_file_ext(b->entry_point_stage); + int len = snprintf(filename, sizeof(filename), "%s/0x%s.%s", + path, name, stage_ext); if (len < 0 || len >= sizeof(filename)) return;