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 <jason@jlekstrand.net>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6479>
diff --git a/src/compiler/shader_enums.c b/src/compiler/shader_enums.c
index 0e28c55..ccea869 100644
--- a/src/compiler/shader_enums.c
+++ b/src/compiler/shader_enums.c
@@ -43,6 +43,14 @@
       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 @@
    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 @@
    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 9a04487..ced516f 100644
--- a/src/compiler/shader_enums.h
+++ b/src/compiler/shader_enums.h
@@ -51,8 +51,19 @@
    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
@@ -89,6 +100,11 @@
 #define MESA_SHADER_STAGES (MESA_SHADER_COMPUTE + 1)
 
 /**
+ * Vulkan stages (not including CL)
+ */
+#define MESA_VULKAN_SHADER_STAGES (MESA_SHADER_CALLABLE + 1)
+
+/**
  * All stages
  */
 #define MESA_ALL_SHADER_STAGES (MESA_SHADER_KERNEL + 1)
diff --git a/src/gallium/drivers/freedreno/a6xx/fd6_program.c b/src/gallium/drivers/freedreno/a6xx/fd6_program.c
index 2eff56f..64690c9 100644
--- a/src/gallium/drivers/freedreno/a6xx/fd6_program.c
+++ b/src/gallium/drivers/freedreno/a6xx/fd6_program.c
@@ -75,6 +75,15 @@
 		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 0d51255..bb1b300 100644
--- a/src/mesa/main/shaderobj.h
+++ b/src/mesa/main/shaderobj.h
@@ -203,8 +203,9 @@
       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 @@
       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 @@
       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