xref: /aosp_15_r20/external/angle/src/compiler/translator/Initialize.cpp (revision 8975f5c5ed3d1c378011245431ada316dfb6f244)
1*8975f5c5SAndroid Build Coastguard Worker //
2*8975f5c5SAndroid Build Coastguard Worker // Copyright 2002 The ANGLE Project Authors. All rights reserved.
3*8975f5c5SAndroid Build Coastguard Worker // Use of this source code is governed by a BSD-style license that can be
4*8975f5c5SAndroid Build Coastguard Worker // found in the LICENSE file.
5*8975f5c5SAndroid Build Coastguard Worker //
6*8975f5c5SAndroid Build Coastguard Worker 
7*8975f5c5SAndroid Build Coastguard Worker #include "compiler/translator/Initialize.h"
8*8975f5c5SAndroid Build Coastguard Worker 
9*8975f5c5SAndroid Build Coastguard Worker namespace sh
10*8975f5c5SAndroid Build Coastguard Worker {
11*8975f5c5SAndroid Build Coastguard Worker 
InitExtensionBehavior(const ShBuiltInResources & resources,TExtensionBehavior & extBehavior)12*8975f5c5SAndroid Build Coastguard Worker void InitExtensionBehavior(const ShBuiltInResources &resources, TExtensionBehavior &extBehavior)
13*8975f5c5SAndroid Build Coastguard Worker {
14*8975f5c5SAndroid Build Coastguard Worker     if (resources.OES_standard_derivatives)
15*8975f5c5SAndroid Build Coastguard Worker     {
16*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OES_standard_derivatives] = EBhUndefined;
17*8975f5c5SAndroid Build Coastguard Worker     }
18*8975f5c5SAndroid Build Coastguard Worker     if (resources.OES_EGL_image_external)
19*8975f5c5SAndroid Build Coastguard Worker     {
20*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OES_EGL_image_external] = EBhUndefined;
21*8975f5c5SAndroid Build Coastguard Worker     }
22*8975f5c5SAndroid Build Coastguard Worker     if (resources.OES_EGL_image_external_essl3)
23*8975f5c5SAndroid Build Coastguard Worker     {
24*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OES_EGL_image_external_essl3] = EBhUndefined;
25*8975f5c5SAndroid Build Coastguard Worker     }
26*8975f5c5SAndroid Build Coastguard Worker     if (resources.NV_EGL_stream_consumer_external)
27*8975f5c5SAndroid Build Coastguard Worker     {
28*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::NV_EGL_stream_consumer_external] = EBhUndefined;
29*8975f5c5SAndroid Build Coastguard Worker     }
30*8975f5c5SAndroid Build Coastguard Worker     if (resources.ARB_texture_rectangle)
31*8975f5c5SAndroid Build Coastguard Worker     {
32*8975f5c5SAndroid Build Coastguard Worker         // Special: ARB_texture_rectangle extension does not follow the standard for #extension
33*8975f5c5SAndroid Build Coastguard Worker         // directives - it is enabled by default. An extension directive may still disable it.
34*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::ARB_texture_rectangle] = EBhEnable;
35*8975f5c5SAndroid Build Coastguard Worker     }
36*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_blend_func_extended)
37*8975f5c5SAndroid Build Coastguard Worker     {
38*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_blend_func_extended] = EBhUndefined;
39*8975f5c5SAndroid Build Coastguard Worker     }
40*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_conservative_depth)
41*8975f5c5SAndroid Build Coastguard Worker     {
42*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_conservative_depth] = EBhUndefined;
43*8975f5c5SAndroid Build Coastguard Worker     }
44*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_draw_buffers)
45*8975f5c5SAndroid Build Coastguard Worker     {
46*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_draw_buffers] = EBhUndefined;
47*8975f5c5SAndroid Build Coastguard Worker     }
48*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_frag_depth)
49*8975f5c5SAndroid Build Coastguard Worker     {
50*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_frag_depth] = EBhUndefined;
51*8975f5c5SAndroid Build Coastguard Worker     }
52*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_primitive_bounding_box)
53*8975f5c5SAndroid Build Coastguard Worker     {
54*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_primitive_bounding_box] = EBhUndefined;
55*8975f5c5SAndroid Build Coastguard Worker     }
56*8975f5c5SAndroid Build Coastguard Worker     if (resources.OES_primitive_bounding_box)
57*8975f5c5SAndroid Build Coastguard Worker     {
58*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OES_primitive_bounding_box] = EBhUndefined;
59*8975f5c5SAndroid Build Coastguard Worker     }
60*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_separate_shader_objects)
61*8975f5c5SAndroid Build Coastguard Worker     {
62*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_separate_shader_objects] = EBhUndefined;
63*8975f5c5SAndroid Build Coastguard Worker     }
64*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_shader_texture_lod)
65*8975f5c5SAndroid Build Coastguard Worker     {
66*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_shader_texture_lod] = EBhUndefined;
67*8975f5c5SAndroid Build Coastguard Worker     }
68*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_shader_framebuffer_fetch)
69*8975f5c5SAndroid Build Coastguard Worker     {
70*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_shader_framebuffer_fetch] = EBhUndefined;
71*8975f5c5SAndroid Build Coastguard Worker     }
72*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_shader_framebuffer_fetch_non_coherent)
73*8975f5c5SAndroid Build Coastguard Worker     {
74*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_shader_framebuffer_fetch_non_coherent] = EBhUndefined;
75*8975f5c5SAndroid Build Coastguard Worker     }
76*8975f5c5SAndroid Build Coastguard Worker     if (resources.NV_shader_framebuffer_fetch)
77*8975f5c5SAndroid Build Coastguard Worker     {
78*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::NV_shader_framebuffer_fetch] = EBhUndefined;
79*8975f5c5SAndroid Build Coastguard Worker     }
80*8975f5c5SAndroid Build Coastguard Worker     if (resources.NV_shader_noperspective_interpolation)
81*8975f5c5SAndroid Build Coastguard Worker     {
82*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::NV_shader_noperspective_interpolation] = EBhUndefined;
83*8975f5c5SAndroid Build Coastguard Worker     }
84*8975f5c5SAndroid Build Coastguard Worker     if (resources.ARM_shader_framebuffer_fetch)
85*8975f5c5SAndroid Build Coastguard Worker     {
86*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::ARM_shader_framebuffer_fetch] = EBhUndefined;
87*8975f5c5SAndroid Build Coastguard Worker     }
88*8975f5c5SAndroid Build Coastguard Worker     if (resources.ARM_shader_framebuffer_fetch_depth_stencil)
89*8975f5c5SAndroid Build Coastguard Worker     {
90*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::ARM_shader_framebuffer_fetch_depth_stencil] = EBhUndefined;
91*8975f5c5SAndroid Build Coastguard Worker     }
92*8975f5c5SAndroid Build Coastguard Worker     if (resources.OVR_multiview)
93*8975f5c5SAndroid Build Coastguard Worker     {
94*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OVR_multiview] = EBhUndefined;
95*8975f5c5SAndroid Build Coastguard Worker     }
96*8975f5c5SAndroid Build Coastguard Worker     if (resources.OVR_multiview2)
97*8975f5c5SAndroid Build Coastguard Worker     {
98*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OVR_multiview2] = EBhUndefined;
99*8975f5c5SAndroid Build Coastguard Worker     }
100*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_YUV_target)
101*8975f5c5SAndroid Build Coastguard Worker     {
102*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_YUV_target] = EBhUndefined;
103*8975f5c5SAndroid Build Coastguard Worker     }
104*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_geometry_shader)
105*8975f5c5SAndroid Build Coastguard Worker     {
106*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_geometry_shader] = EBhUndefined;
107*8975f5c5SAndroid Build Coastguard Worker     }
108*8975f5c5SAndroid Build Coastguard Worker     if (resources.OES_geometry_shader)
109*8975f5c5SAndroid Build Coastguard Worker     {
110*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OES_geometry_shader] = EBhUndefined;
111*8975f5c5SAndroid Build Coastguard Worker     }
112*8975f5c5SAndroid Build Coastguard Worker     if (resources.OES_shader_io_blocks)
113*8975f5c5SAndroid Build Coastguard Worker     {
114*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OES_shader_io_blocks] = EBhUndefined;
115*8975f5c5SAndroid Build Coastguard Worker     }
116*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_shader_io_blocks)
117*8975f5c5SAndroid Build Coastguard Worker     {
118*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_shader_io_blocks] = EBhUndefined;
119*8975f5c5SAndroid Build Coastguard Worker     }
120*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_gpu_shader5)
121*8975f5c5SAndroid Build Coastguard Worker     {
122*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_gpu_shader5] = EBhUndefined;
123*8975f5c5SAndroid Build Coastguard Worker     }
124*8975f5c5SAndroid Build Coastguard Worker     if (resources.OES_gpu_shader5)
125*8975f5c5SAndroid Build Coastguard Worker     {
126*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OES_gpu_shader5] = EBhUndefined;
127*8975f5c5SAndroid Build Coastguard Worker     }
128*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_shader_non_constant_global_initializers)
129*8975f5c5SAndroid Build Coastguard Worker     {
130*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_shader_non_constant_global_initializers] = EBhUndefined;
131*8975f5c5SAndroid Build Coastguard Worker     }
132*8975f5c5SAndroid Build Coastguard Worker     if (resources.OES_texture_storage_multisample_2d_array)
133*8975f5c5SAndroid Build Coastguard Worker     {
134*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OES_texture_storage_multisample_2d_array] = EBhUndefined;
135*8975f5c5SAndroid Build Coastguard Worker     }
136*8975f5c5SAndroid Build Coastguard Worker     if (resources.OES_texture_3D)
137*8975f5c5SAndroid Build Coastguard Worker     {
138*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OES_texture_3D] = EBhUndefined;
139*8975f5c5SAndroid Build Coastguard Worker     }
140*8975f5c5SAndroid Build Coastguard Worker     if (resources.ANGLE_shader_pixel_local_storage)
141*8975f5c5SAndroid Build Coastguard Worker     {
142*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::ANGLE_shader_pixel_local_storage] = EBhUndefined;
143*8975f5c5SAndroid Build Coastguard Worker     }
144*8975f5c5SAndroid Build Coastguard Worker     if (resources.ANGLE_texture_multisample)
145*8975f5c5SAndroid Build Coastguard Worker     {
146*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::ANGLE_texture_multisample] = EBhUndefined;
147*8975f5c5SAndroid Build Coastguard Worker     }
148*8975f5c5SAndroid Build Coastguard Worker     if (resources.ANGLE_multi_draw)
149*8975f5c5SAndroid Build Coastguard Worker     {
150*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::ANGLE_multi_draw] = EBhUndefined;
151*8975f5c5SAndroid Build Coastguard Worker     }
152*8975f5c5SAndroid Build Coastguard Worker     if (resources.ANGLE_base_vertex_base_instance_shader_builtin)
153*8975f5c5SAndroid Build Coastguard Worker     {
154*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::ANGLE_base_vertex_base_instance_shader_builtin] = EBhUndefined;
155*8975f5c5SAndroid Build Coastguard Worker     }
156*8975f5c5SAndroid Build Coastguard Worker     if (resources.WEBGL_video_texture)
157*8975f5c5SAndroid Build Coastguard Worker     {
158*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::WEBGL_video_texture] = EBhUndefined;
159*8975f5c5SAndroid Build Coastguard Worker     }
160*8975f5c5SAndroid Build Coastguard Worker     if (resources.APPLE_clip_distance)
161*8975f5c5SAndroid Build Coastguard Worker     {
162*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::APPLE_clip_distance] = EBhUndefined;
163*8975f5c5SAndroid Build Coastguard Worker     }
164*8975f5c5SAndroid Build Coastguard Worker     if (resources.OES_texture_cube_map_array)
165*8975f5c5SAndroid Build Coastguard Worker     {
166*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OES_texture_cube_map_array] = EBhUndefined;
167*8975f5c5SAndroid Build Coastguard Worker     }
168*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_texture_cube_map_array)
169*8975f5c5SAndroid Build Coastguard Worker     {
170*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_texture_cube_map_array] = EBhUndefined;
171*8975f5c5SAndroid Build Coastguard Worker     }
172*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_texture_query_lod)
173*8975f5c5SAndroid Build Coastguard Worker     {
174*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_texture_query_lod] = EBhUndefined;
175*8975f5c5SAndroid Build Coastguard Worker     }
176*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_texture_shadow_lod)
177*8975f5c5SAndroid Build Coastguard Worker     {
178*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_texture_shadow_lod] = EBhUndefined;
179*8975f5c5SAndroid Build Coastguard Worker     }
180*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_shadow_samplers)
181*8975f5c5SAndroid Build Coastguard Worker     {
182*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_shadow_samplers] = EBhUndefined;
183*8975f5c5SAndroid Build Coastguard Worker     }
184*8975f5c5SAndroid Build Coastguard Worker     if (resources.OES_shader_multisample_interpolation)
185*8975f5c5SAndroid Build Coastguard Worker     {
186*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OES_shader_multisample_interpolation] = EBhUndefined;
187*8975f5c5SAndroid Build Coastguard Worker     }
188*8975f5c5SAndroid Build Coastguard Worker     if (resources.OES_shader_image_atomic)
189*8975f5c5SAndroid Build Coastguard Worker     {
190*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OES_shader_image_atomic] = EBhUndefined;
191*8975f5c5SAndroid Build Coastguard Worker     }
192*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_tessellation_shader)
193*8975f5c5SAndroid Build Coastguard Worker     {
194*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_tessellation_shader] = EBhUndefined;
195*8975f5c5SAndroid Build Coastguard Worker     }
196*8975f5c5SAndroid Build Coastguard Worker     if (resources.OES_tessellation_shader)
197*8975f5c5SAndroid Build Coastguard Worker     {
198*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OES_tessellation_shader] = EBhUndefined;
199*8975f5c5SAndroid Build Coastguard Worker     }
200*8975f5c5SAndroid Build Coastguard Worker     if (resources.OES_texture_buffer)
201*8975f5c5SAndroid Build Coastguard Worker     {
202*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OES_texture_buffer] = EBhUndefined;
203*8975f5c5SAndroid Build Coastguard Worker     }
204*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_texture_buffer)
205*8975f5c5SAndroid Build Coastguard Worker     {
206*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_texture_buffer] = EBhUndefined;
207*8975f5c5SAndroid Build Coastguard Worker     }
208*8975f5c5SAndroid Build Coastguard Worker     if (resources.OES_sample_variables)
209*8975f5c5SAndroid Build Coastguard Worker     {
210*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::OES_sample_variables] = EBhUndefined;
211*8975f5c5SAndroid Build Coastguard Worker     }
212*8975f5c5SAndroid Build Coastguard Worker     if (resources.EXT_clip_cull_distance)
213*8975f5c5SAndroid Build Coastguard Worker     {
214*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::EXT_clip_cull_distance] = EBhUndefined;
215*8975f5c5SAndroid Build Coastguard Worker     }
216*8975f5c5SAndroid Build Coastguard Worker     if (resources.ANGLE_clip_cull_distance)
217*8975f5c5SAndroid Build Coastguard Worker     {
218*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::ANGLE_clip_cull_distance] = EBhUndefined;
219*8975f5c5SAndroid Build Coastguard Worker     }
220*8975f5c5SAndroid Build Coastguard Worker     if (resources.ANDROID_extension_pack_es31a)
221*8975f5c5SAndroid Build Coastguard Worker     {
222*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::ANDROID_extension_pack_es31a] = EBhUndefined;
223*8975f5c5SAndroid Build Coastguard Worker     }
224*8975f5c5SAndroid Build Coastguard Worker     if (resources.KHR_blend_equation_advanced)
225*8975f5c5SAndroid Build Coastguard Worker     {
226*8975f5c5SAndroid Build Coastguard Worker         extBehavior[TExtension::KHR_blend_equation_advanced] = EBhUndefined;
227*8975f5c5SAndroid Build Coastguard Worker     }
228*8975f5c5SAndroid Build Coastguard Worker }
229*8975f5c5SAndroid Build Coastguard Worker 
ResetExtensionBehavior(const ShBuiltInResources & resources,TExtensionBehavior & extBehavior,const ShCompileOptions & compileOptions)230*8975f5c5SAndroid Build Coastguard Worker void ResetExtensionBehavior(const ShBuiltInResources &resources,
231*8975f5c5SAndroid Build Coastguard Worker                             TExtensionBehavior &extBehavior,
232*8975f5c5SAndroid Build Coastguard Worker                             const ShCompileOptions &compileOptions)
233*8975f5c5SAndroid Build Coastguard Worker {
234*8975f5c5SAndroid Build Coastguard Worker     for (auto &ext : extBehavior)
235*8975f5c5SAndroid Build Coastguard Worker     {
236*8975f5c5SAndroid Build Coastguard Worker         ext.second = EBhUndefined;
237*8975f5c5SAndroid Build Coastguard Worker     }
238*8975f5c5SAndroid Build Coastguard Worker     if (resources.ARB_texture_rectangle)
239*8975f5c5SAndroid Build Coastguard Worker     {
240*8975f5c5SAndroid Build Coastguard Worker         if (compileOptions.disableARBTextureRectangle)
241*8975f5c5SAndroid Build Coastguard Worker         {
242*8975f5c5SAndroid Build Coastguard Worker             // Remove ARB_texture_rectangle so it can't be enabled by extension directives.
243*8975f5c5SAndroid Build Coastguard Worker             extBehavior.erase(TExtension::ARB_texture_rectangle);
244*8975f5c5SAndroid Build Coastguard Worker         }
245*8975f5c5SAndroid Build Coastguard Worker         else
246*8975f5c5SAndroid Build Coastguard Worker         {
247*8975f5c5SAndroid Build Coastguard Worker             // Restore ARB_texture_rectangle in case it was removed during an earlier reset.  As
248*8975f5c5SAndroid Build Coastguard Worker             // noted above, it doesn't follow the standard for extension directives and is
249*8975f5c5SAndroid Build Coastguard Worker             // enabled by default.
250*8975f5c5SAndroid Build Coastguard Worker             extBehavior[TExtension::ARB_texture_rectangle] = EBhEnable;
251*8975f5c5SAndroid Build Coastguard Worker         }
252*8975f5c5SAndroid Build Coastguard Worker     }
253*8975f5c5SAndroid Build Coastguard Worker }
254*8975f5c5SAndroid Build Coastguard Worker 
255*8975f5c5SAndroid Build Coastguard Worker }  // namespace sh
256