xref: /aosp_15_r20/external/angle/src/compiler/translator/ExtensionBehavior.h (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1 //
2 // Copyright 2002 The ANGLE Project Authors. All rights reserved.
3 // Use of this source code is governed by a BSD-style license that can be
4 // found in the LICENSE file.
5 //
6 // ExtensionBehavior.h: Extension name enumeration and data structures for storing extension
7 // behavior.
8 
9 #ifndef COMPILER_TRANSLATOR_EXTENSIONBEHAVIOR_H_
10 #define COMPILER_TRANSLATOR_EXTENSIONBEHAVIOR_H_
11 
12 #include <cstdint>
13 #include <map>
14 
15 namespace sh
16 {
17 
18 enum class TExtension : uint8_t
19 {
20     UNDEFINED,  // Special value used to indicate no extension.
21 
22     ANDROID_extension_pack_es31a,
23     ANGLE_base_vertex_base_instance_shader_builtin,
24     ANGLE_clip_cull_distance,
25     ANGLE_multi_draw,
26     ANGLE_shader_pixel_local_storage,
27     ANGLE_texture_multisample,
28     APPLE_clip_distance,
29     ARB_fragment_shader_interlock,
30     ARB_texture_rectangle,
31     ARM_shader_framebuffer_fetch,
32     ARM_shader_framebuffer_fetch_depth_stencil,
33     EXT_YUV_target,
34     EXT_blend_func_extended,
35     EXT_clip_cull_distance,
36     EXT_conservative_depth,
37     EXT_draw_buffers,
38     EXT_frag_depth,
39     EXT_geometry_shader,
40     EXT_gpu_shader5,
41     EXT_primitive_bounding_box,
42     EXT_separate_shader_objects,
43     EXT_shader_framebuffer_fetch,
44     EXT_shader_framebuffer_fetch_non_coherent,
45     EXT_shader_io_blocks,
46     EXT_shader_non_constant_global_initializers,
47     EXT_shader_texture_lod,
48     EXT_shadow_samplers,
49     EXT_tessellation_shader,
50     EXT_texture_buffer,
51     EXT_texture_cube_map_array,
52     EXT_texture_query_lod,
53     EXT_texture_shadow_lod,
54     INTEL_fragment_shader_ordering,
55     KHR_blend_equation_advanced,
56     NV_EGL_stream_consumer_external,
57     NV_fragment_shader_interlock,
58     NV_shader_framebuffer_fetch,
59     NV_shader_noperspective_interpolation,
60     OES_EGL_image_external,
61     OES_EGL_image_external_essl3,
62     OES_geometry_shader,
63     OES_gpu_shader5,
64     OES_primitive_bounding_box,
65     OES_sample_variables,
66     OES_shader_image_atomic,
67     OES_shader_io_blocks,
68     OES_shader_multisample_interpolation,
69     OES_standard_derivatives,
70     OES_tessellation_shader,
71     OES_texture_3D,
72     OES_texture_buffer,
73     OES_texture_cube_map_array,
74     OES_texture_storage_multisample_2d_array,
75     OVR_multiview,
76     OVR_multiview2,
77     WEBGL_video_texture,
78 };
79 
80 enum TBehavior : uint8_t
81 {
82     EBhRequire,
83     EBhEnable,
84     EBhWarn,
85     EBhDisable,
86     EBhUndefined
87 };
88 
89 const char *GetExtensionNameString(TExtension extension);
90 TExtension GetExtensionByName(const char *extension);
91 bool CheckExtensionVersion(TExtension extension, int version);
92 
93 const char *GetBehaviorString(TBehavior b);
94 
95 // Mapping between extension id and behavior.
96 typedef std::map<TExtension, TBehavior> TExtensionBehavior;
97 
98 bool IsExtensionEnabled(const TExtensionBehavior &extBehavior, TExtension extension);
99 
100 }  // namespace sh
101 
102 #endif  // COMPILER_TRANSLATOR_EXTENSIONBEHAVIOR_H_
103