• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 //
2 // Copyright (C) 2002-2005  3Dlabs Inc. Ltd.
3 // Copyright (C) 2012-2013 LunarG, Inc.
4 // Copyright (C) 2017 ARM Limited.
5 // Copyright (C) 2015-2018 Google, Inc.
6 // Modifications Copyright (C) 2020 Advanced Micro Devices, Inc. All rights reserved.
7 //
8 // All rights reserved.
9 //
10 // Redistribution and use in source and binary forms, with or without
11 // modification, are permitted provided that the following conditions
12 // are met:
13 //
14 //    Redistributions of source code must retain the above copyright
15 //    notice, this list of conditions and the following disclaimer.
16 //
17 //    Redistributions in binary form must reproduce the above
18 //    copyright notice, this list of conditions and the following
19 //    disclaimer in the documentation and/or other materials provided
20 //    with the distribution.
21 //
22 //    Neither the name of 3Dlabs Inc. Ltd. nor the names of its
23 //    contributors may be used to endorse or promote products derived
24 //    from this software without specific prior written permission.
25 //
26 // THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
27 // "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
28 // LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS
29 // FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE
30 // COPYRIGHT HOLDERS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT,
31 // INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING,
32 // BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES;
33 // LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER
34 // CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
35 // LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN
36 // ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE
37 // POSSIBILITY OF SUCH DAMAGE.
38 //
39 
40 #ifndef _VERSIONS_INCLUDED_
41 #define _VERSIONS_INCLUDED_
42 
43 #define LAST_ELEMENT_MARKER(x) x
44 
45 //
46 // Help manage multiple profiles, versions, extensions etc.
47 //
48 
49 //
50 // Profiles are set up for masking operations, so queries can be done on multiple
51 // profiles at the same time.
52 //
53 // Don't maintain an ordinal set of enums (0,1,2,3...) to avoid all possible
54 // defects from mixing the two different forms.
55 //
56 typedef enum : unsigned {
57     EBadProfile           = 0,
58     ENoProfile            = (1 << 0), // only for desktop, before profiles showed up
59     ECoreProfile          = (1 << 1),
60     ECompatibilityProfile = (1 << 2),
61     EEsProfile            = (1 << 3),
62     LAST_ELEMENT_MARKER(EProfileCount),
63 } EProfile;
64 
65 namespace glslang {
66 
67 //
68 // Map from profile enum to externally readable text name.
69 //
ProfileName(EProfile profile)70 inline const char* ProfileName(EProfile profile)
71 {
72     switch (profile) {
73     case ENoProfile:             return "none";
74     case ECoreProfile:           return "core";
75     case ECompatibilityProfile:  return "compatibility";
76     case EEsProfile:             return "es";
77     default:                     return "unknown profile";
78     }
79 }
80 
81 //
82 // What source rules, validation rules, target language, etc. are needed or
83 // desired for SPIR-V?
84 //
85 // 0 means a target or rule set is not enabled (ignore rules from that entity).
86 // Non-0 means to apply semantic rules arising from that version of its rule set.
87 // The union of all requested rule sets will be applied.
88 //
89 struct SpvVersion {
SpvVersionSpvVersion90     SpvVersion() : spv(0), vulkanGlsl(0), vulkan(0), openGl(0), vulkanRelaxed(false) {}
91     unsigned int spv; // the version of SPIR-V to target, as defined by "word 1" of the SPIR-V binary header
92     int vulkanGlsl;   // the version of GLSL semantics for Vulkan, from GL_KHR_vulkan_glsl, for "#define VULKAN XXX"
93     int vulkan;       // the version of Vulkan, for which SPIR-V execution environment rules to use
94     int openGl;       // the version of GLSL semantics for OpenGL, from GL_ARB_gl_spirv, for "#define GL_SPIRV XXX"
95     bool vulkanRelaxed; // relax changes to GLSL for Vulkan, allowing some GL-specific to be compiled to Vulkan SPIR-V target
96 };
97 
98 //
99 // The behaviors from the GLSL "#extension extension_name : behavior"
100 //
101 typedef enum {
102     EBhMissing = 0,
103     EBhRequire,
104     EBhEnable,
105     EBhWarn,
106     EBhDisable,
107     EBhDisablePartial    // use as initial state of an extension that is only partially implemented
108 } TExtensionBehavior;
109 
110 //
111 // Symbolic names for extensions.  Strings may be directly used when calling the
112 // functions, but better to have the compiler do spelling checks.
113 //
114 const char* const E_GL_OES_texture_3D                   = "GL_OES_texture_3D";
115 const char* const E_GL_OES_standard_derivatives         = "GL_OES_standard_derivatives";
116 const char* const E_GL_EXT_frag_depth                   = "GL_EXT_frag_depth";
117 const char* const E_GL_OES_EGL_image_external           = "GL_OES_EGL_image_external";
118 const char* const E_GL_OES_EGL_image_external_essl3     = "GL_OES_EGL_image_external_essl3";
119 const char* const E_GL_EXT_YUV_target                   = "GL_EXT_YUV_target";
120 const char* const E_GL_EXT_shader_texture_lod           = "GL_EXT_shader_texture_lod";
121 const char* const E_GL_EXT_shadow_samplers              = "GL_EXT_shadow_samplers";
122 
123 const char* const E_GL_ARB_texture_rectangle            = "GL_ARB_texture_rectangle";
124 const char* const E_GL_3DL_array_objects                = "GL_3DL_array_objects";
125 const char* const E_GL_ARB_shading_language_420pack     = "GL_ARB_shading_language_420pack";
126 const char* const E_GL_ARB_texture_gather               = "GL_ARB_texture_gather";
127 const char* const E_GL_ARB_gpu_shader5                  = "GL_ARB_gpu_shader5";
128 const char* const E_GL_ARB_separate_shader_objects      = "GL_ARB_separate_shader_objects";
129 const char* const E_GL_ARB_compute_shader               = "GL_ARB_compute_shader";
130 const char* const E_GL_ARB_tessellation_shader          = "GL_ARB_tessellation_shader";
131 const char* const E_GL_ARB_enhanced_layouts             = "GL_ARB_enhanced_layouts";
132 const char* const E_GL_ARB_texture_cube_map_array       = "GL_ARB_texture_cube_map_array";
133 const char* const E_GL_ARB_texture_multisample          = "GL_ARB_texture_multisample";
134 const char* const E_GL_ARB_shader_texture_lod           = "GL_ARB_shader_texture_lod";
135 const char* const E_GL_ARB_explicit_attrib_location     = "GL_ARB_explicit_attrib_location";
136 const char* const E_GL_ARB_explicit_uniform_location    = "GL_ARB_explicit_uniform_location";
137 const char* const E_GL_ARB_shader_image_load_store      = "GL_ARB_shader_image_load_store";
138 const char* const E_GL_ARB_shader_atomic_counters       = "GL_ARB_shader_atomic_counters";
139 const char* const E_GL_ARB_shader_atomic_counter_ops    = "GL_ARB_shader_atomic_counter_ops";
140 const char* const E_GL_ARB_shader_draw_parameters       = "GL_ARB_shader_draw_parameters";
141 const char* const E_GL_ARB_shader_group_vote            = "GL_ARB_shader_group_vote";
142 const char* const E_GL_ARB_derivative_control           = "GL_ARB_derivative_control";
143 const char* const E_GL_ARB_shader_texture_image_samples = "GL_ARB_shader_texture_image_samples";
144 const char* const E_GL_ARB_viewport_array               = "GL_ARB_viewport_array";
145 const char* const E_GL_ARB_gpu_shader_int64             = "GL_ARB_gpu_shader_int64";
146 const char* const E_GL_ARB_gpu_shader_fp64              = "GL_ARB_gpu_shader_fp64";
147 const char* const E_GL_ARB_shader_ballot                = "GL_ARB_shader_ballot";
148 const char* const E_GL_ARB_sparse_texture2              = "GL_ARB_sparse_texture2";
149 const char* const E_GL_ARB_sparse_texture_clamp         = "GL_ARB_sparse_texture_clamp";
150 const char* const E_GL_ARB_shader_stencil_export        = "GL_ARB_shader_stencil_export";
151 // const char* const E_GL_ARB_cull_distance            = "GL_ARB_cull_distance";  // present for 4.5, but need extension control over block members
152 const char* const E_GL_ARB_post_depth_coverage          = "GL_ARB_post_depth_coverage";
153 const char* const E_GL_ARB_shader_viewport_layer_array  = "GL_ARB_shader_viewport_layer_array";
154 const char* const E_GL_ARB_fragment_shader_interlock    = "GL_ARB_fragment_shader_interlock";
155 const char* const E_GL_ARB_shader_clock                 = "GL_ARB_shader_clock";
156 const char* const E_GL_ARB_uniform_buffer_object        = "GL_ARB_uniform_buffer_object";
157 const char* const E_GL_ARB_sample_shading               = "GL_ARB_sample_shading";
158 const char* const E_GL_ARB_shader_bit_encoding          = "GL_ARB_shader_bit_encoding";
159 const char* const E_GL_ARB_shader_image_size            = "GL_ARB_shader_image_size";
160 const char* const E_GL_ARB_shader_storage_buffer_object = "GL_ARB_shader_storage_buffer_object";
161 const char* const E_GL_ARB_shading_language_packing     = "GL_ARB_shading_language_packing";
162 const char* const E_GL_ARB_texture_query_lod            = "GL_ARB_texture_query_lod";
163 const char* const E_GL_ARB_vertex_attrib_64bit          = "GL_ARB_vertex_attrib_64bit";
164 const char* const E_GL_ARB_draw_instanced               = "GL_ARB_draw_instanced";
165 const char* const E_GL_ARB_fragment_coord_conventions   = "GL_ARB_fragment_coord_conventions";
166 const char* const E_GL_ARB_bindless_texture             = "GL_ARB_bindless_texture";
167 
168 const char* const E_GL_KHR_shader_subgroup_basic            = "GL_KHR_shader_subgroup_basic";
169 const char* const E_GL_KHR_shader_subgroup_vote             = "GL_KHR_shader_subgroup_vote";
170 const char* const E_GL_KHR_shader_subgroup_arithmetic       = "GL_KHR_shader_subgroup_arithmetic";
171 const char* const E_GL_KHR_shader_subgroup_ballot           = "GL_KHR_shader_subgroup_ballot";
172 const char* const E_GL_KHR_shader_subgroup_shuffle          = "GL_KHR_shader_subgroup_shuffle";
173 const char* const E_GL_KHR_shader_subgroup_shuffle_relative = "GL_KHR_shader_subgroup_shuffle_relative";
174 const char* const E_GL_KHR_shader_subgroup_clustered        = "GL_KHR_shader_subgroup_clustered";
175 const char* const E_GL_KHR_shader_subgroup_quad             = "GL_KHR_shader_subgroup_quad";
176 const char* const E_GL_KHR_memory_scope_semantics           = "GL_KHR_memory_scope_semantics";
177 const char* const E_GL_KHR_cooperative_matrix               = "GL_KHR_cooperative_matrix";
178 
179 const char* const E_GL_EXT_shader_atomic_int64              = "GL_EXT_shader_atomic_int64";
180 
181 const char* const E_GL_EXT_shader_non_constant_global_initializers = "GL_EXT_shader_non_constant_global_initializers";
182 const char* const E_GL_EXT_shader_image_load_formatted = "GL_EXT_shader_image_load_formatted";
183 
184 const char* const E_GL_EXT_shader_16bit_storage             = "GL_EXT_shader_16bit_storage";
185 const char* const E_GL_EXT_shader_8bit_storage              = "GL_EXT_shader_8bit_storage";
186 
187 
188 // EXT extensions
189 const char* const E_GL_EXT_device_group                     = "GL_EXT_device_group";
190 const char* const E_GL_EXT_multiview                        = "GL_EXT_multiview";
191 const char* const E_GL_EXT_post_depth_coverage              = "GL_EXT_post_depth_coverage";
192 const char* const E_GL_EXT_control_flow_attributes          = "GL_EXT_control_flow_attributes";
193 const char* const E_GL_EXT_nonuniform_qualifier             = "GL_EXT_nonuniform_qualifier";
194 const char* const E_GL_EXT_samplerless_texture_functions    = "GL_EXT_samplerless_texture_functions";
195 const char* const E_GL_EXT_scalar_block_layout              = "GL_EXT_scalar_block_layout";
196 const char* const E_GL_EXT_fragment_invocation_density      = "GL_EXT_fragment_invocation_density";
197 const char* const E_GL_EXT_buffer_reference                 = "GL_EXT_buffer_reference";
198 const char* const E_GL_EXT_buffer_reference2                = "GL_EXT_buffer_reference2";
199 const char* const E_GL_EXT_buffer_reference_uvec2           = "GL_EXT_buffer_reference_uvec2";
200 const char* const E_GL_EXT_demote_to_helper_invocation      = "GL_EXT_demote_to_helper_invocation";
201 const char* const E_GL_EXT_shader_realtime_clock            = "GL_EXT_shader_realtime_clock";
202 const char* const E_GL_EXT_debug_printf                     = "GL_EXT_debug_printf";
203 const char* const E_GL_EXT_ray_tracing                      = "GL_EXT_ray_tracing";
204 const char* const E_GL_EXT_ray_query                        = "GL_EXT_ray_query";
205 const char* const E_GL_EXT_ray_flags_primitive_culling      = "GL_EXT_ray_flags_primitive_culling";
206 const char* const E_GL_EXT_ray_cull_mask                    = "GL_EXT_ray_cull_mask";
207 const char* const E_GL_EXT_blend_func_extended              = "GL_EXT_blend_func_extended";
208 const char* const E_GL_EXT_shader_implicit_conversions      = "GL_EXT_shader_implicit_conversions";
209 const char* const E_GL_EXT_fragment_shading_rate            = "GL_EXT_fragment_shading_rate";
210 const char* const E_GL_EXT_shader_image_int64               = "GL_EXT_shader_image_int64";
211 const char* const E_GL_EXT_null_initializer                 = "GL_EXT_null_initializer";
212 const char* const E_GL_EXT_shared_memory_block              = "GL_EXT_shared_memory_block";
213 const char* const E_GL_EXT_subgroup_uniform_control_flow    = "GL_EXT_subgroup_uniform_control_flow";
214 const char* const E_GL_EXT_spirv_intrinsics                 = "GL_EXT_spirv_intrinsics";
215 const char* const E_GL_EXT_fragment_shader_barycentric      = "GL_EXT_fragment_shader_barycentric";
216 const char* const E_GL_EXT_mesh_shader                      = "GL_EXT_mesh_shader";
217 const char* const E_GL_EXT_opacity_micromap                 = "GL_EXT_opacity_micromap";
218 const char* const E_GL_EXT_draw_instanced                   = "GL_EXT_draw_instanced";
219 const char* const E_GL_EXT_texture_array                    = "GL_EXT_texture_array";
220 
221 // Arrays of extensions for the above viewportEXTs duplications
222 
223 const char* const post_depth_coverageEXTs[] = { E_GL_ARB_post_depth_coverage, E_GL_EXT_post_depth_coverage };
224 const int Num_post_depth_coverageEXTs = sizeof(post_depth_coverageEXTs) / sizeof(post_depth_coverageEXTs[0]);
225 
226 // Array of extensions to cover both extensions providing ray tracing capabilities.
227 const char* const ray_tracing_EXTs[] = { E_GL_EXT_ray_query, E_GL_EXT_ray_tracing };
228 const int Num_ray_tracing_EXTs = sizeof(ray_tracing_EXTs) / sizeof(ray_tracing_EXTs[0]);
229 
230 // OVR extensions
231 const char* const E_GL_OVR_multiview                    = "GL_OVR_multiview";
232 const char* const E_GL_OVR_multiview2                   = "GL_OVR_multiview2";
233 
234 const char* const OVR_multiview_EXTs[] = { E_GL_OVR_multiview, E_GL_OVR_multiview2 };
235 const int Num_OVR_multiview_EXTs = sizeof(OVR_multiview_EXTs) / sizeof(OVR_multiview_EXTs[0]);
236 
237 // #line and #include
238 const char* const E_GL_GOOGLE_cpp_style_line_directive          = "GL_GOOGLE_cpp_style_line_directive";
239 const char* const E_GL_GOOGLE_include_directive                 = "GL_GOOGLE_include_directive";
240 
241 const char* const E_GL_AMD_shader_ballot                        = "GL_AMD_shader_ballot";
242 const char* const E_GL_AMD_shader_trinary_minmax                = "GL_AMD_shader_trinary_minmax";
243 const char* const E_GL_AMD_shader_explicit_vertex_parameter     = "GL_AMD_shader_explicit_vertex_parameter";
244 const char* const E_GL_AMD_gcn_shader                           = "GL_AMD_gcn_shader";
245 const char* const E_GL_AMD_gpu_shader_half_float                = "GL_AMD_gpu_shader_half_float";
246 const char* const E_GL_AMD_texture_gather_bias_lod              = "GL_AMD_texture_gather_bias_lod";
247 const char* const E_GL_AMD_gpu_shader_int16                     = "GL_AMD_gpu_shader_int16";
248 const char* const E_GL_AMD_shader_image_load_store_lod          = "GL_AMD_shader_image_load_store_lod";
249 const char* const E_GL_AMD_shader_fragment_mask                 = "GL_AMD_shader_fragment_mask";
250 const char* const E_GL_AMD_gpu_shader_half_float_fetch          = "GL_AMD_gpu_shader_half_float_fetch";
251 const char* const E_GL_AMD_shader_early_and_late_fragment_tests = "GL_AMD_shader_early_and_late_fragment_tests";
252 
253 const char* const E_GL_INTEL_shader_integer_functions2          = "GL_INTEL_shader_integer_functions2";
254 
255 const char* const E_GL_NV_sample_mask_override_coverage         = "GL_NV_sample_mask_override_coverage";
256 const char* const E_SPV_NV_geometry_shader_passthrough          = "GL_NV_geometry_shader_passthrough";
257 const char* const E_GL_NV_viewport_array2                       = "GL_NV_viewport_array2";
258 const char* const E_GL_NV_stereo_view_rendering                 = "GL_NV_stereo_view_rendering";
259 const char* const E_GL_NVX_multiview_per_view_attributes        = "GL_NVX_multiview_per_view_attributes";
260 const char* const E_GL_NV_shader_atomic_int64                   = "GL_NV_shader_atomic_int64";
261 const char* const E_GL_NV_conservative_raster_underestimation   = "GL_NV_conservative_raster_underestimation";
262 const char* const E_GL_NV_shader_noperspective_interpolation    = "GL_NV_shader_noperspective_interpolation";
263 const char* const E_GL_NV_shader_subgroup_partitioned           = "GL_NV_shader_subgroup_partitioned";
264 const char* const E_GL_NV_shading_rate_image                    = "GL_NV_shading_rate_image";
265 const char* const E_GL_NV_ray_tracing                           = "GL_NV_ray_tracing";
266 const char* const E_GL_NV_ray_tracing_motion_blur               = "GL_NV_ray_tracing_motion_blur";
267 const char* const E_GL_NV_fragment_shader_barycentric           = "GL_NV_fragment_shader_barycentric";
268 const char* const E_GL_NV_compute_shader_derivatives            = "GL_NV_compute_shader_derivatives";
269 const char* const E_GL_NV_shader_texture_footprint              = "GL_NV_shader_texture_footprint";
270 const char* const E_GL_NV_mesh_shader                           = "GL_NV_mesh_shader";
271 const char* const E_GL_NV_cooperative_matrix                    = "GL_NV_cooperative_matrix";
272 const char* const E_GL_NV_shader_sm_builtins                    = "GL_NV_shader_sm_builtins";
273 const char* const E_GL_NV_integer_cooperative_matrix            = "GL_NV_integer_cooperative_matrix";
274 const char* const E_GL_NV_shader_invocation_reorder             = "GL_NV_shader_invocation_reorder";
275 const char* const E_GL_EXT_ray_tracing_position_fetch           = "GL_EXT_ray_tracing_position_fetch";
276 const char* const E_GL_NV_displacement_micromap                 = "GL_NV_displacement_micromap";
277 
278 // ARM
279 const char* const E_GL_ARM_shader_core_builtins                 = "GL_ARM_shader_core_builtins";
280 
281 // Arrays of extensions for the above viewportEXTs duplications
282 
283 const char* const viewportEXTs[] = { E_GL_ARB_shader_viewport_layer_array, E_GL_NV_viewport_array2 };
284 const int Num_viewportEXTs = sizeof(viewportEXTs) / sizeof(viewportEXTs[0]);
285 
286 
287 const char* const E_GL_QCOM_image_processing                    = "GL_QCOM_image_processing";
288 
289 // AEP
290 const char* const E_GL_ANDROID_extension_pack_es31a             = "GL_ANDROID_extension_pack_es31a";
291 const char* const E_GL_KHR_blend_equation_advanced              = "GL_KHR_blend_equation_advanced";
292 const char* const E_GL_OES_sample_variables                     = "GL_OES_sample_variables";
293 const char* const E_GL_OES_shader_image_atomic                  = "GL_OES_shader_image_atomic";
294 const char* const E_GL_OES_shader_multisample_interpolation     = "GL_OES_shader_multisample_interpolation";
295 const char* const E_GL_OES_texture_storage_multisample_2d_array = "GL_OES_texture_storage_multisample_2d_array";
296 const char* const E_GL_EXT_geometry_shader                      = "GL_EXT_geometry_shader";
297 const char* const E_GL_EXT_geometry_point_size                  = "GL_EXT_geometry_point_size";
298 const char* const E_GL_EXT_gpu_shader5                          = "GL_EXT_gpu_shader5";
299 const char* const E_GL_EXT_primitive_bounding_box               = "GL_EXT_primitive_bounding_box";
300 const char* const E_GL_EXT_shader_io_blocks                     = "GL_EXT_shader_io_blocks";
301 const char* const E_GL_EXT_tessellation_shader                  = "GL_EXT_tessellation_shader";
302 const char* const E_GL_EXT_tessellation_point_size              = "GL_EXT_tessellation_point_size";
303 const char* const E_GL_EXT_texture_buffer                       = "GL_EXT_texture_buffer";
304 const char* const E_GL_EXT_texture_cube_map_array               = "GL_EXT_texture_cube_map_array";
305 const char* const E_GL_EXT_shader_integer_mix                   = "GL_EXT_shader_integer_mix";
306 
307 // OES matching AEP
308 const char* const E_GL_OES_geometry_shader                      = "GL_OES_geometry_shader";
309 const char* const E_GL_OES_geometry_point_size                  = "GL_OES_geometry_point_size";
310 const char* const E_GL_OES_gpu_shader5                          = "GL_OES_gpu_shader5";
311 const char* const E_GL_OES_primitive_bounding_box               = "GL_OES_primitive_bounding_box";
312 const char* const E_GL_OES_shader_io_blocks                     = "GL_OES_shader_io_blocks";
313 const char* const E_GL_OES_tessellation_shader                  = "GL_OES_tessellation_shader";
314 const char* const E_GL_OES_tessellation_point_size              = "GL_OES_tessellation_point_size";
315 const char* const E_GL_OES_texture_buffer                       = "GL_OES_texture_buffer";
316 const char* const E_GL_OES_texture_cube_map_array               = "GL_OES_texture_cube_map_array";
317 
318 // EXT
319 const char* const E_GL_EXT_shader_explicit_arithmetic_types          = "GL_EXT_shader_explicit_arithmetic_types";
320 const char* const E_GL_EXT_shader_explicit_arithmetic_types_int8     = "GL_EXT_shader_explicit_arithmetic_types_int8";
321 const char* const E_GL_EXT_shader_explicit_arithmetic_types_int16    = "GL_EXT_shader_explicit_arithmetic_types_int16";
322 const char* const E_GL_EXT_shader_explicit_arithmetic_types_int32    = "GL_EXT_shader_explicit_arithmetic_types_int32";
323 const char* const E_GL_EXT_shader_explicit_arithmetic_types_int64    = "GL_EXT_shader_explicit_arithmetic_types_int64";
324 const char* const E_GL_EXT_shader_explicit_arithmetic_types_float16  = "GL_EXT_shader_explicit_arithmetic_types_float16";
325 const char* const E_GL_EXT_shader_explicit_arithmetic_types_float32  = "GL_EXT_shader_explicit_arithmetic_types_float32";
326 const char* const E_GL_EXT_shader_explicit_arithmetic_types_float64  = "GL_EXT_shader_explicit_arithmetic_types_float64";
327 
328 const char* const E_GL_EXT_shader_subgroup_extended_types_int8    = "GL_EXT_shader_subgroup_extended_types_int8";
329 const char* const E_GL_EXT_shader_subgroup_extended_types_int16   = "GL_EXT_shader_subgroup_extended_types_int16";
330 const char* const E_GL_EXT_shader_subgroup_extended_types_int64   = "GL_EXT_shader_subgroup_extended_types_int64";
331 const char* const E_GL_EXT_shader_subgroup_extended_types_float16 = "GL_EXT_shader_subgroup_extended_types_float16";
332 const char* const E_GL_EXT_terminate_invocation = "GL_EXT_terminate_invocation";
333 
334 const char* const E_GL_EXT_shader_atomic_float = "GL_EXT_shader_atomic_float";
335 const char* const E_GL_EXT_shader_atomic_float2 = "GL_EXT_shader_atomic_float2";
336 
337 const char* const E_GL_EXT_shader_tile_image = "GL_EXT_shader_tile_image";
338 
339 const char* const E_GL_EXT_texture_shadow_lod = "GL_EXT_texture_shadow_lod";
340 
341 // Arrays of extensions for the above AEP duplications
342 
343 const char* const AEP_geometry_shader[] = { E_GL_EXT_geometry_shader, E_GL_OES_geometry_shader };
344 const int Num_AEP_geometry_shader = sizeof(AEP_geometry_shader)/sizeof(AEP_geometry_shader[0]);
345 
346 const char* const AEP_geometry_point_size[] = { E_GL_EXT_geometry_point_size, E_GL_OES_geometry_point_size };
347 const int Num_AEP_geometry_point_size = sizeof(AEP_geometry_point_size)/sizeof(AEP_geometry_point_size[0]);
348 
349 const char* const AEP_gpu_shader5[] = { E_GL_EXT_gpu_shader5, E_GL_OES_gpu_shader5 };
350 const int Num_AEP_gpu_shader5 = sizeof(AEP_gpu_shader5)/sizeof(AEP_gpu_shader5[0]);
351 
352 const char* const AEP_primitive_bounding_box[] = { E_GL_EXT_primitive_bounding_box, E_GL_OES_primitive_bounding_box };
353 const int Num_AEP_primitive_bounding_box = sizeof(AEP_primitive_bounding_box)/sizeof(AEP_primitive_bounding_box[0]);
354 
355 const char* const AEP_shader_io_blocks[] = { E_GL_EXT_shader_io_blocks, E_GL_OES_shader_io_blocks };
356 const int Num_AEP_shader_io_blocks = sizeof(AEP_shader_io_blocks)/sizeof(AEP_shader_io_blocks[0]);
357 
358 const char* const AEP_tessellation_shader[] = { E_GL_EXT_tessellation_shader, E_GL_OES_tessellation_shader };
359 const int Num_AEP_tessellation_shader = sizeof(AEP_tessellation_shader)/sizeof(AEP_tessellation_shader[0]);
360 
361 const char* const AEP_tessellation_point_size[] = { E_GL_EXT_tessellation_point_size, E_GL_OES_tessellation_point_size };
362 const int Num_AEP_tessellation_point_size = sizeof(AEP_tessellation_point_size)/sizeof(AEP_tessellation_point_size[0]);
363 
364 const char* const AEP_texture_buffer[] = { E_GL_EXT_texture_buffer, E_GL_OES_texture_buffer };
365 const int Num_AEP_texture_buffer = sizeof(AEP_texture_buffer)/sizeof(AEP_texture_buffer[0]);
366 
367 const char* const AEP_texture_cube_map_array[] = { E_GL_EXT_texture_cube_map_array, E_GL_OES_texture_cube_map_array };
368 const int Num_AEP_texture_cube_map_array = sizeof(AEP_texture_cube_map_array)/sizeof(AEP_texture_cube_map_array[0]);
369 
370 const char* const AEP_mesh_shader[] = { E_GL_NV_mesh_shader, E_GL_EXT_mesh_shader };
371 const int Num_AEP_mesh_shader = sizeof(AEP_mesh_shader)/sizeof(AEP_mesh_shader[0]);
372 
373 } // end namespace glslang
374 
375 #endif // _VERSIONS_INCLUDED_
376