1use std::collections::HashMap;
2
3use once_cell::sync::Lazy;
4
5use crate::types::type_names::TypeNameAtom;
6
7#[macro_use]
8pub mod names;
9
10use names::ExtNameAtom;
11
12pub struct ExtensionSpec {
13 name: ExtNameAtom,
14 type_names: Vec<TypeNameAtom>,
15}
16
17impl ExtensionSpec {
18 pub fn new(name: ExtNameAtom, type_names: Vec<TypeNameAtom>) -> Self {
19 Self { name, type_names }
20 }
21
22 pub fn name(&self) -> &ExtNameAtom {
23 &self.name
24 }
25
26 pub fn type_names(&self) -> &[TypeNameAtom] {
27 &self.type_names
28 }
29}
30
31pub struct Registry {
32 extensions: HashMap<ExtNameAtom, ExtensionSpec>,
33}
34
35impl Registry {
36 pub fn new() -> Self {
37 Self {
38 extensions: Default::default(),
39 }
40 }
41
42 pub fn all(&self) -> impl Iterator<Item = &ExtensionSpec> {
43 self.extensions.values()
44 }
45
46 pub fn get(&self, name: &ExtNameAtom) -> Option<&ExtensionSpec> {
47 self.extensions.get(name)
48 }
49
50 pub fn add(&mut self, spec: ExtensionSpec) {
51 self.extensions.insert(spec.name.clone(), spec);
52 }
53}
54
55impl Default for Registry {
58 fn default() -> Self {
59 Self {
60 extensions: [
61 ExtensionSpec::new(ExtNameAtom::from("GL_3DL_array_objects"), vec![]),
62 ExtensionSpec::new(
63 ExtNameAtom::from("GL_AMD_gpu_shader_int16"),
64 vec![
65 TypeNameAtom::from("int16_t"),
66 TypeNameAtom::from("i16vec2"),
67 TypeNameAtom::from("i16vec3"),
68 TypeNameAtom::from("i16vec4"),
69 TypeNameAtom::from("uint16_t"),
70 TypeNameAtom::from("u16vec2"),
71 TypeNameAtom::from("u16vec3"),
72 TypeNameAtom::from("u16vec4"),
73 ],
74 ),
75 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_compute_shader"), vec![]),
76 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_derivative_control"), vec![]),
77 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_enhanced_layouts"), vec![]),
78 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_explicit_attrib_location"), vec![]),
79 ExtensionSpec::new(
80 ExtNameAtom::from("GL_ARB_explicit_uniform_location"),
81 vec![],
82 ),
83 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_gpu_shader5"), vec![]),
84 ExtensionSpec::new(
85 ExtNameAtom::from("GL_ARB_gpu_shader_fp64"),
86 vec![
87 type_name!("double"),
88 type_name!("dvec2"),
89 type_name!("dvec3"),
90 type_name!("dvec4"),
91 type_name!("dmat2"),
92 type_name!("dmat3"),
93 type_name!("dmat4"),
94 type_name!("dmat2x2"),
95 type_name!("dmat2x3"),
96 type_name!("dmat2x4"),
97 type_name!("dmat3x2"),
98 type_name!("dmat3x3"),
99 type_name!("dmat3x4"),
100 type_name!("dmat4x2"),
101 type_name!("dmat4x3"),
102 type_name!("dmat4x4"),
103 ],
104 ),
105 ExtensionSpec::new(
106 ExtNameAtom::from("GL_ARB_gpu_shader_int64"),
107 vec![
108 TypeNameAtom::from("int64_t"),
109 TypeNameAtom::from("i64vec2"),
110 TypeNameAtom::from("i64vec3"),
111 TypeNameAtom::from("i64vec4"),
112 TypeNameAtom::from("uint64_t"),
113 TypeNameAtom::from("u64vec2"),
114 TypeNameAtom::from("u64vec3"),
115 TypeNameAtom::from("u64vec4"),
116 ],
117 ),
118 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_sample_shading"), vec![]),
119 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_separate_shader_objects"), vec![]),
120 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_shader_bit_encoding"), vec![]),
121 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_shader_draw_parameters"), vec![]),
122 ExtensionSpec::new(
123 ExtNameAtom::from("GL_ARB_shader_image_load_store"),
124 vec![
125 type_name!("image1D"),
126 type_name!("iimage1D"),
127 type_name!("uimage1D"),
128 type_name!("image2D"),
129 type_name!("iimage2D"),
130 type_name!("uimage2D"),
131 type_name!("image3D"),
132 type_name!("iimage3D"),
133 type_name!("uimage3D"),
134 type_name!("image2DRect"),
135 type_name!("iimage2DRect"),
136 type_name!("uimage2DRect"),
137 type_name!("imageCube"),
138 type_name!("iimageCube"),
139 type_name!("uimageCube"),
140 type_name!("imageBuffer"),
141 type_name!("iimageBuffer"),
142 type_name!("uimageBuffer"),
143 type_name!("image1DArray"),
144 type_name!("iimage1DArray"),
145 type_name!("uimage1DArray"),
146 type_name!("image2DArray"),
147 type_name!("iimage2DArray"),
148 type_name!("uimage2DArray"),
149 type_name!("imageCubeArray"),
150 type_name!("iimageCubeArray"),
151 type_name!("uimageCubeArray"),
152 type_name!("image2DMS"),
153 type_name!("iimage2DMS"),
154 type_name!("uimage2DMS"),
155 type_name!("image2DMSArray"),
156 type_name!("iimage2DMSArray"),
157 type_name!("uimage2DMSArray"),
158 ],
159 ),
160 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_shader_image_size"), vec![]),
161 ExtensionSpec::new(
162 ExtNameAtom::from("GL_ARB_shader_storage_buffer_object"),
163 vec![],
164 ),
165 ExtensionSpec::new(
166 ExtNameAtom::from("GL_ARB_shader_texture_image_samples"),
167 vec![],
168 ),
169 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_shader_texture_lod"), vec![]),
170 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_shading_language_420pack"), vec![]),
171 ExtensionSpec::new(ext_name!("GL_ARB_shading_language_include"), vec![]),
172 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_shading_language_packing"), vec![]),
173 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_sparse_texture2"), vec![]),
174 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_tessellation_shader"), vec![]),
175 ExtensionSpec::new(
176 ExtNameAtom::from("GL_ARB_texture_cube_map_array"),
177 vec![
178 type_name!("samplerCubeArray"),
179 type_name!("samplerCubeArrayShadow"),
180 type_name!("isamplerCubeArray"),
181 type_name!("usamplerCubeArray"),
182 ],
183 ),
184 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_texture_gather"), vec![]),
185 ExtensionSpec::new(
186 ExtNameAtom::from("GL_ARB_texture_multisample"),
187 vec![
188 type_name!("sampler2DMS"),
189 type_name!("isampler2DMS"),
190 type_name!("usampler2DMS"),
191 type_name!("sampler2DMSArray"),
192 type_name!("isampler2DMSArray"),
193 type_name!("usampler2DMSArray"),
194 ],
195 ),
196 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_texture_query_lod"), vec![]),
197 ExtensionSpec::new(
198 ExtNameAtom::from("GL_ARB_texture_rectangle"),
199 vec![
200 type_name!("sampler2DRect"),
201 type_name!("sampler2DRectShadow"),
202 ],
203 ),
204 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_uniform_buffer_object"), vec![]),
205 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_vertex_attrib_64bit"), vec![]),
206 ExtensionSpec::new(ExtNameAtom::from("GL_ARB_viewport_array"), vec![]),
207 ExtensionSpec::new(
208 ExtNameAtom::from("GL_EXT_YUV_target"),
209 vec![TypeNameAtom::from("__samplerExternal2DY2YEXT")],
210 ),
211 ExtensionSpec::new(ExtNameAtom::from("GL_EXT_blend_func_extended"), vec![]),
212 ExtensionSpec::new(ExtNameAtom::from("GL_EXT_control_flow_attributes"), vec![]),
213 ExtensionSpec::new(ExtNameAtom::from("GL_EXT_device_group"), vec![]),
214 ExtensionSpec::new(ExtNameAtom::from("GL_EXT_frag_depth"), vec![]),
215 ExtensionSpec::new(ExtNameAtom::from("GL_EXT_geometry_shader"), vec![]),
216 ExtensionSpec::new(ExtNameAtom::from("GL_EXT_gpu_shader5"), vec![]),
217 ExtensionSpec::new(ExtNameAtom::from("GL_EXT_multiview"), vec![]),
218 ExtensionSpec::new(ExtNameAtom::from("GL_EXT_nonuniform_qualifier"), vec![]),
219 ExtensionSpec::new(ExtNameAtom::from("GL_EXT_null_initializer"), vec![]),
220 ExtensionSpec::new(ExtNameAtom::from("GL_EXT_primitive_bounding_box"), vec![]),
221 ExtensionSpec::new(
222 ExtNameAtom::from("GL_EXT_ray_flags_primitive_culling"),
223 vec![],
224 ),
225 ExtensionSpec::new(
226 ExtNameAtom::from("GL_EXT_ray_query"),
227 vec![
228 TypeNameAtom::from("accelerationStructureEXT"),
229 TypeNameAtom::from("rayQueryEXT"),
230 ],
231 ),
232 ExtensionSpec::new(
233 ExtNameAtom::from("GL_EXT_samplerless_texture_functions"),
234 vec![],
235 ),
236 ExtensionSpec::new(
237 ExtNameAtom::from("GL_EXT_shader_explicit_arithmetic_types"),
238 vec![
239 TypeNameAtom::from("float64_t"),
240 TypeNameAtom::from("f64vec2"),
241 TypeNameAtom::from("f64vec3"),
242 TypeNameAtom::from("f64vec4"),
243 TypeNameAtom::from("f64mat2"),
244 TypeNameAtom::from("f64mat3"),
245 TypeNameAtom::from("f64mat4"),
246 TypeNameAtom::from("f64mat2x2"),
247 TypeNameAtom::from("f64mat2x3"),
248 TypeNameAtom::from("f64mat2x4"),
249 TypeNameAtom::from("f64mat3x2"),
250 TypeNameAtom::from("f64mat3x3"),
251 TypeNameAtom::from("f64mat3x4"),
252 TypeNameAtom::from("f64mat4x2"),
253 TypeNameAtom::from("f64mat4x3"),
254 TypeNameAtom::from("f64mat4x4"),
255 TypeNameAtom::from("float32_t"),
256 TypeNameAtom::from("f32vec2"),
257 TypeNameAtom::from("f32vec3"),
258 TypeNameAtom::from("f32vec4"),
259 TypeNameAtom::from("f32mat2"),
260 TypeNameAtom::from("f32mat3"),
261 TypeNameAtom::from("f32mat4"),
262 TypeNameAtom::from("f32mat2x2"),
263 TypeNameAtom::from("f32mat2x3"),
264 TypeNameAtom::from("f32mat2x4"),
265 TypeNameAtom::from("f32mat3x2"),
266 TypeNameAtom::from("f32mat3x3"),
267 TypeNameAtom::from("f32mat3x4"),
268 TypeNameAtom::from("f32mat4x2"),
269 TypeNameAtom::from("f32mat4x3"),
270 TypeNameAtom::from("f32mat4x4"),
271 TypeNameAtom::from("float16_t"),
272 TypeNameAtom::from("f16vec2"),
273 TypeNameAtom::from("f16vec3"),
274 TypeNameAtom::from("f16vec4"),
275 TypeNameAtom::from("f16mat2"),
276 TypeNameAtom::from("f16mat3"),
277 TypeNameAtom::from("f16mat4"),
278 TypeNameAtom::from("f16mat2x2"),
279 TypeNameAtom::from("f16mat2x3"),
280 TypeNameAtom::from("f16mat2x4"),
281 TypeNameAtom::from("f16mat3x2"),
282 TypeNameAtom::from("f16mat3x3"),
283 TypeNameAtom::from("f16mat3x4"),
284 TypeNameAtom::from("f16mat4x2"),
285 TypeNameAtom::from("f16mat4x3"),
286 TypeNameAtom::from("f16mat4x4"),
287 TypeNameAtom::from("int64_t"),
288 TypeNameAtom::from("i64vec2"),
289 TypeNameAtom::from("i64vec3"),
290 TypeNameAtom::from("i64vec4"),
291 TypeNameAtom::from("uint64_t"),
292 TypeNameAtom::from("u64vec2"),
293 TypeNameAtom::from("u64vec3"),
294 TypeNameAtom::from("u64vec4"),
295 TypeNameAtom::from("int32_t"),
296 TypeNameAtom::from("i32vec2"),
297 TypeNameAtom::from("i32vec3"),
298 TypeNameAtom::from("i32vec4"),
299 TypeNameAtom::from("uint32_t"),
300 TypeNameAtom::from("u32vec2"),
301 TypeNameAtom::from("u32vec3"),
302 TypeNameAtom::from("u32vec4"),
303 TypeNameAtom::from("int16_t"),
304 TypeNameAtom::from("i16vec2"),
305 TypeNameAtom::from("i16vec3"),
306 TypeNameAtom::from("i16vec4"),
307 TypeNameAtom::from("uint16_t"),
308 TypeNameAtom::from("u16vec2"),
309 TypeNameAtom::from("u16vec3"),
310 TypeNameAtom::from("u16vec4"),
311 TypeNameAtom::from("int8_t"),
312 TypeNameAtom::from("i8vec2"),
313 TypeNameAtom::from("i8vec3"),
314 TypeNameAtom::from("i8vec4"),
315 TypeNameAtom::from("uint8_t"),
316 TypeNameAtom::from("u8vec2"),
317 TypeNameAtom::from("u8vec3"),
318 TypeNameAtom::from("u8vec4"),
319 ],
320 ),
321 ExtensionSpec::new(
322 ExtNameAtom::from("GL_EXT_shader_explicit_arithmetic_types_float16"),
323 vec![
324 TypeNameAtom::from("float16_t"),
325 TypeNameAtom::from("f16vec2"),
326 TypeNameAtom::from("f16vec3"),
327 TypeNameAtom::from("f16vec4"),
328 TypeNameAtom::from("f16mat2"),
329 TypeNameAtom::from("f16mat3"),
330 TypeNameAtom::from("f16mat4"),
331 TypeNameAtom::from("f16mat2x2"),
332 TypeNameAtom::from("f16mat2x3"),
333 TypeNameAtom::from("f16mat2x4"),
334 TypeNameAtom::from("f16mat3x2"),
335 TypeNameAtom::from("f16mat3x3"),
336 TypeNameAtom::from("f16mat3x4"),
337 TypeNameAtom::from("f16mat4x2"),
338 TypeNameAtom::from("f16mat4x3"),
339 TypeNameAtom::from("f16mat4x4"),
340 ],
341 ),
342 ExtensionSpec::new(
343 ExtNameAtom::from("GL_EXT_shader_explicit_arithmetic_types_float32"),
344 vec![
345 TypeNameAtom::from("float32_t"),
346 TypeNameAtom::from("f32vec2"),
347 TypeNameAtom::from("f32vec3"),
348 TypeNameAtom::from("f32vec4"),
349 TypeNameAtom::from("f32mat2"),
350 TypeNameAtom::from("f32mat3"),
351 TypeNameAtom::from("f32mat4"),
352 TypeNameAtom::from("f32mat2x2"),
353 TypeNameAtom::from("f32mat2x3"),
354 TypeNameAtom::from("f32mat2x4"),
355 TypeNameAtom::from("f32mat3x2"),
356 TypeNameAtom::from("f32mat3x3"),
357 TypeNameAtom::from("f32mat3x4"),
358 TypeNameAtom::from("f32mat4x2"),
359 TypeNameAtom::from("f32mat4x3"),
360 TypeNameAtom::from("f32mat4x4"),
361 ],
362 ),
363 ExtensionSpec::new(
364 ExtNameAtom::from("GL_EXT_shader_explicit_arithmetic_types_float64"),
365 vec![
366 TypeNameAtom::from("float64_t"),
367 TypeNameAtom::from("f64vec2"),
368 TypeNameAtom::from("f64vec3"),
369 TypeNameAtom::from("f64vec4"),
370 TypeNameAtom::from("f64mat2"),
371 TypeNameAtom::from("f64mat3"),
372 TypeNameAtom::from("f64mat4"),
373 TypeNameAtom::from("f64mat2x2"),
374 TypeNameAtom::from("f64mat2x3"),
375 TypeNameAtom::from("f64mat2x4"),
376 TypeNameAtom::from("f64mat3x2"),
377 TypeNameAtom::from("f64mat3x3"),
378 TypeNameAtom::from("f64mat3x4"),
379 TypeNameAtom::from("f64mat4x2"),
380 TypeNameAtom::from("f64mat4x3"),
381 TypeNameAtom::from("f64mat4x4"),
382 ],
383 ),
384 ExtensionSpec::new(
385 ExtNameAtom::from("GL_EXT_shader_explicit_arithmetic_types_int16"),
386 vec![
387 TypeNameAtom::from("int16_t"),
388 TypeNameAtom::from("i16vec2"),
389 TypeNameAtom::from("i16vec3"),
390 TypeNameAtom::from("i16vec4"),
391 TypeNameAtom::from("uint16_t"),
392 TypeNameAtom::from("u16vec2"),
393 TypeNameAtom::from("u16vec3"),
394 TypeNameAtom::from("u16vec4"),
395 ],
396 ),
397 ExtensionSpec::new(
398 ExtNameAtom::from("GL_EXT_shader_explicit_arithmetic_types_int32"),
399 vec![
400 TypeNameAtom::from("int32_t"),
401 TypeNameAtom::from("i32vec2"),
402 TypeNameAtom::from("i32vec3"),
403 TypeNameAtom::from("i32vec4"),
404 TypeNameAtom::from("uint32_t"),
405 TypeNameAtom::from("u32vec2"),
406 TypeNameAtom::from("u32vec3"),
407 TypeNameAtom::from("u32vec4"),
408 ],
409 ),
410 ExtensionSpec::new(
411 ExtNameAtom::from("GL_EXT_shader_explicit_arithmetic_types_int64"),
412 vec![
413 TypeNameAtom::from("int64_t"),
414 TypeNameAtom::from("i64vec2"),
415 TypeNameAtom::from("i64vec3"),
416 TypeNameAtom::from("i64vec4"),
417 TypeNameAtom::from("uint64_t"),
418 TypeNameAtom::from("u64vec2"),
419 TypeNameAtom::from("u64vec3"),
420 TypeNameAtom::from("u64vec4"),
421 ],
422 ),
423 ExtensionSpec::new(
424 ExtNameAtom::from("GL_EXT_shader_explicit_arithmetic_types_int8"),
425 vec![
426 TypeNameAtom::from("int8_t"),
427 TypeNameAtom::from("i8vec2"),
428 TypeNameAtom::from("i8vec3"),
429 TypeNameAtom::from("i8vec4"),
430 TypeNameAtom::from("uint8_t"),
431 TypeNameAtom::from("u8vec2"),
432 TypeNameAtom::from("u8vec3"),
433 TypeNameAtom::from("u8vec4"),
434 ],
435 ),
436 ExtensionSpec::new(
437 ExtNameAtom::from("GL_EXT_shader_implicit_conversions"),
438 vec![],
439 ),
440 ExtensionSpec::new(ExtNameAtom::from("GL_EXT_shader_integer_mix"), vec![]),
441 ExtensionSpec::new(ExtNameAtom::from("GL_EXT_shader_io_blocks"), vec![]),
442 ExtensionSpec::new(
443 ExtNameAtom::from("GL_EXT_shader_non_constant_global_initializers"),
444 vec![],
445 ),
446 ExtensionSpec::new(
447 ExtNameAtom::from("GL_EXT_shader_texture_image_samples"),
448 vec![],
449 ),
450 ExtensionSpec::new(ExtNameAtom::from("GL_EXT_shader_texture_lod"), vec![]),
451 ExtensionSpec::new(ExtNameAtom::from("GL_EXT_terminate_invocation"), vec![]),
452 ExtensionSpec::new(ExtNameAtom::from("GL_EXT_tessellation_shader"), vec![]),
453 ExtensionSpec::new(
454 ExtNameAtom::from("GL_EXT_texture_buffer"),
455 vec![
456 type_name!("samplerBuffer"),
457 type_name!("isamplerBuffer"),
458 type_name!("usamplerBuffer"),
459 type_name!("imageBuffer"),
460 type_name!("iimageBuffer"),
461 type_name!("uimageBuffer"),
462 ],
463 ),
464 ExtensionSpec::new(
465 ExtNameAtom::from("GL_EXT_texture_cube_map_array"),
466 vec![
467 type_name!("samplerCubeArray"),
468 type_name!("samplerCubeArrayShadow"),
469 type_name!("isamplerCubeArray"),
470 type_name!("usamplerCubeArray"),
471 type_name!("imageCubeArray"),
472 type_name!("iimageCubeArray"),
473 type_name!("uimageCubeArray"),
474 ],
475 ),
476 ExtensionSpec::new(ext_name!("GL_GOOGLE_include_directive"), vec![]),
477 ExtensionSpec::new(ext_name!("GL_GOOGLE_cpp_style_line_directive"), vec![]),
478 ExtensionSpec::new(ExtNameAtom::from("GL_KHR_blend_equation_advanced"), vec![]),
479 ExtensionSpec::new(
480 ExtNameAtom::from("GL_KHR_shader_subgroup_arithmetic"),
481 vec![],
482 ),
483 ExtensionSpec::new(ExtNameAtom::from("GL_KHR_shader_subgroup_ballot"), vec![]),
484 ExtensionSpec::new(ExtNameAtom::from("GL_KHR_shader_subgroup_basic"), vec![]),
485 ExtensionSpec::new(
486 ExtNameAtom::from("GL_KHR_shader_subgroup_clustered"),
487 vec![],
488 ),
489 ExtensionSpec::new(ExtNameAtom::from("GL_KHR_shader_subgroup_quad"), vec![]),
490 ExtensionSpec::new(ExtNameAtom::from("GL_KHR_shader_subgroup_shuffle"), vec![]),
491 ExtensionSpec::new(
492 ExtNameAtom::from("GL_KHR_shader_subgroup_shuffle_relative"),
493 vec![],
494 ),
495 ExtensionSpec::new(ExtNameAtom::from("GL_KHR_shader_subgroup_vote"), vec![]),
496 ExtensionSpec::new(ExtNameAtom::from("GL_NV_mesh_shader"), vec![]),
497 ExtensionSpec::new(
498 ExtNameAtom::from("GL_NV_ray_tracing"),
499 vec![
500 TypeNameAtom::from("accelerationStructureNV"),
501 TypeNameAtom::from("rayPayloadNV"),
502 TypeNameAtom::from("rayPayloadInNV"),
503 TypeNameAtom::from("hitAttributeNV"),
504 TypeNameAtom::from("callableDataNV"),
505 TypeNameAtom::from("callableDataInNV"),
506 ],
507 ),
508 ExtensionSpec::new(
509 ExtNameAtom::from("GL_NV_shader_noperspective_interpolation"),
510 vec![],
511 ),
512 ExtensionSpec::new(ExtNameAtom::from("GL_NV_shader_sm_builtins"), vec![]),
513 ExtensionSpec::new(
514 ExtNameAtom::from("GL_NV_shader_subgroup_partitioned"),
515 vec![],
516 ),
517 ExtensionSpec::new(
518 ExtNameAtom::from("GL_OES_EGL_image_external"),
519 vec![TypeNameAtom::from("samplerExternalOES")],
520 ),
521 ExtensionSpec::new(
522 ExtNameAtom::from("GL_OES_EGL_image_external_essl3"),
523 vec![TypeNameAtom::from("samplerExternalOES")],
524 ),
525 ExtensionSpec::new(ExtNameAtom::from("GL_OES_geometry_point_size"), vec![]),
526 ExtensionSpec::new(ExtNameAtom::from("GL_OES_geometry_shader"), vec![]),
527 ExtensionSpec::new(ExtNameAtom::from("GL_OES_gpu_shader5"), vec![]),
528 ExtensionSpec::new(ExtNameAtom::from("GL_OES_primitive_bounding_box"), vec![]),
529 ExtensionSpec::new(ExtNameAtom::from("GL_OES_sample_variables"), vec![]),
530 ExtensionSpec::new(ExtNameAtom::from("GL_OES_shader_image_atomic"), vec![]),
531 ExtensionSpec::new(ExtNameAtom::from("GL_OES_shader_io_blocks"), vec![]),
532 ExtensionSpec::new(
533 ExtNameAtom::from("GL_OES_shader_multisample_interpolation"),
534 vec![],
535 ),
536 ExtensionSpec::new(ExtNameAtom::from("GL_OES_standard_derivatives"), vec![]),
537 ExtensionSpec::new(ExtNameAtom::from("GL_OES_tessellation_point_size"), vec![]),
538 ExtensionSpec::new(ExtNameAtom::from("GL_OES_tessellation_shader"), vec![]),
539 ExtensionSpec::new(
540 ExtNameAtom::from("GL_OES_texture_buffer"),
541 vec![
542 type_name!("samplerBuffer"),
543 type_name!("isamplerBuffer"),
544 type_name!("usamplerBuffer"),
545 type_name!("imageBuffer"),
546 type_name!("iimageBuffer"),
547 type_name!("uimageBuffer"),
548 ],
549 ),
550 ExtensionSpec::new(
551 ExtNameAtom::from("GL_OES_texture_cube_map_array"),
552 vec![
553 type_name!("samplerCubeArray"),
554 type_name!("samplerCubeArrayShadow"),
555 type_name!("isamplerCubeArray"),
556 type_name!("usamplerCubeArray"),
557 type_name!("imageCubeArray"),
558 type_name!("iimageCubeArray"),
559 type_name!("uimageCubeArray"),
560 ],
561 ),
562 ExtensionSpec::new(
563 ExtNameAtom::from("GL_OES_texture_3D"),
564 vec![type_name!("sampler3D")],
565 ),
566 ExtensionSpec::new(
567 ExtNameAtom::from("GL_OES_texture_storage_multisample_2d_array"),
568 vec![
569 type_name!("sampler2DMSArray"),
570 type_name!("isampler2DMSArray"),
571 type_name!("usampler2DMSArray"),
572 ],
573 ),
574 ExtensionSpec::new(ExtNameAtom::from("GL_OVR_multiview"), vec![]),
575 ExtensionSpec::new(ExtNameAtom::from("GL_OVR_multiview2"), vec![]),
576 ]
577 .into_iter()
578 .map(|spec| (spec.name.clone(), spec))
579 .collect(),
580 }
581 }
582}
583
584pub static DEFAULT_REGISTRY: Lazy<Registry> = Lazy::new(Registry::default);
585pub static EMPTY_REGISTRY: Lazy<Registry> = Lazy::new(Registry::new);