@@ -76,6 +76,48 @@ pub enum TargetEnv {
76
76
Vulkan_1_4 ,
77
77
}
78
78
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
+
79
121
impl Default for TargetEnv {
80
122
fn default ( ) -> Self {
81
123
// This is the default target environment for (AFAICT) all spirv-tools
0 commit comments