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;