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