@@ -76,6 +76,48 @@ pub enum TargetEnv {
7676 Vulkan_1_4 ,
7777}
7878
79+ impl TargetEnv {
80+ /// Returns the `(mayor, minor)` version of spv this enum variant must at least support
81+ ///
82+ /// The spirv versions for vulkan targets have been pulled from the source of the vulkan spec:
83+ /// <https://github.com/KhronosGroup/Vulkan-Docs/blob/main/appendices/spirvenv.adoc?plain=1#L21>
84+ pub fn spirv_version ( & self ) -> ( u8 , u8 ) {
85+ #[ allow( clippy:: match_same_arms) ]
86+ match self {
87+ TargetEnv :: Universal_1_0 => ( 1 , 0 ) ,
88+ TargetEnv :: Universal_1_1 => ( 1 , 1 ) ,
89+ TargetEnv :: Universal_1_2 => ( 1 , 2 ) ,
90+ TargetEnv :: Universal_1_3 => ( 1 , 3 ) ,
91+ TargetEnv :: Universal_1_4 => ( 1 , 4 ) ,
92+ TargetEnv :: Universal_1_5 => ( 1 , 5 ) ,
93+ TargetEnv :: Universal_1_6 => ( 1 , 6 ) ,
94+
95+ TargetEnv :: OpenGL_4_0 => ( 1 , 0 ) ,
96+ TargetEnv :: OpenGL_4_1 => ( 1 , 0 ) ,
97+ TargetEnv :: OpenGL_4_2 => ( 1 , 0 ) ,
98+ TargetEnv :: OpenGL_4_3 => ( 1 , 0 ) ,
99+ TargetEnv :: OpenGL_4_5 => ( 1 , 0 ) ,
100+
101+ TargetEnv :: OpenCL_1_2 => ( 1 , 0 ) ,
102+ TargetEnv :: OpenCL_2_0 => ( 1 , 0 ) ,
103+ TargetEnv :: OpenCL_2_1 => ( 1 , 0 ) ,
104+ TargetEnv :: OpenCL_2_2 => ( 1 , 2 ) ,
105+ TargetEnv :: OpenCLEmbedded_1_2 => ( 1 , 0 ) ,
106+ TargetEnv :: OpenCLEmbedded_2_0 => ( 1 , 0 ) ,
107+ TargetEnv :: OpenCLEmbedded_2_1 => ( 1 , 0 ) ,
108+ TargetEnv :: OpenCLEmbedded_2_2 => ( 1 , 2 ) ,
109+
110+ TargetEnv :: Vulkan_1_0 => ( 1 , 0 ) ,
111+ TargetEnv :: Vulkan_1_1 => ( 1 , 3 ) ,
112+ TargetEnv :: WebGPU_0 => ( 1 , 3 ) ,
113+ TargetEnv :: Vulkan_1_1_Spirv_1_4 => ( 1 , 4 ) ,
114+ TargetEnv :: Vulkan_1_2 => ( 1 , 5 ) ,
115+ TargetEnv :: Vulkan_1_3 => ( 1 , 6 ) ,
116+ TargetEnv :: Vulkan_1_4 => ( 1 , 6 ) ,
117+ }
118+ }
119+ }
120+
79121impl Default for TargetEnv {
80122 fn default ( ) -> Self {
81123 // This is the default target environment for (AFAICT) all spirv-tools
0 commit comments