xref: /aosp_15_r20/external/mesa3d/src/mapi/glapi/gen/apiexec.py (revision 6104692788411f58d303aa86923a9ff6ecaded22)
1*61046927SAndroid Build Coastguard Worker# Copyright (C) 2015 Intel Corporation
2*61046927SAndroid Build Coastguard Worker#
3*61046927SAndroid Build Coastguard Worker# Permission is hereby granted, free of charge, to any person obtaining a
4*61046927SAndroid Build Coastguard Worker# copy of this software and associated documentation files (the "Software"),
5*61046927SAndroid Build Coastguard Worker# to deal in the Software without restriction, including without limitation
6*61046927SAndroid Build Coastguard Worker# the rights to use, copy, modify, merge, publish, distribute, sublicense,
7*61046927SAndroid Build Coastguard Worker# and/or sell copies of the Software, and to permit persons to whom the
8*61046927SAndroid Build Coastguard Worker# Software is furnished to do so, subject to the following conditions:
9*61046927SAndroid Build Coastguard Worker#
10*61046927SAndroid Build Coastguard Worker# The above copyright notice and this permission notice (including the next
11*61046927SAndroid Build Coastguard Worker# paragraph) shall be included in all copies or substantial portions of the
12*61046927SAndroid Build Coastguard Worker# Software.
13*61046927SAndroid Build Coastguard Worker#
14*61046927SAndroid Build Coastguard Worker# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15*61046927SAndroid Build Coastguard Worker# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16*61046927SAndroid Build Coastguard Worker# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.  IN NO EVENT SHALL
17*61046927SAndroid Build Coastguard Worker# THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18*61046927SAndroid Build Coastguard Worker# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
19*61046927SAndroid Build Coastguard Worker# FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
20*61046927SAndroid Build Coastguard Worker# IN THE SOFTWARE.
21*61046927SAndroid Build Coastguard Worker
22*61046927SAndroid Build Coastguard Workerimport argparse
23*61046927SAndroid Build Coastguard Workerimport gl_XML
24*61046927SAndroid Build Coastguard Worker
25*61046927SAndroid Build Coastguard Workerclass exec_info():
26*61046927SAndroid Build Coastguard Worker    """Information relating GL APIs to a function.
27*61046927SAndroid Build Coastguard Worker
28*61046927SAndroid Build Coastguard Worker    Each of the four attributes of this class, compatibility, core, es1, and
29*61046927SAndroid Build Coastguard Worker    es2, specify the minimum API version where a function can possibly exist
30*61046927SAndroid Build Coastguard Worker    in Mesa.  The version is specified as an integer of (real GL version *
31*61046927SAndroid Build Coastguard Worker    10).  For example, glCreateProgram was added in OpenGL 2.0, so
32*61046927SAndroid Build Coastguard Worker    compatibility=20 and core=31.
33*61046927SAndroid Build Coastguard Worker
34*61046927SAndroid Build Coastguard Worker    If the attribute is None, then it cannot be supported by that
35*61046927SAndroid Build Coastguard Worker    API.  For example, glNewList was removed from core profiles, so
36*61046927SAndroid Build Coastguard Worker    compatibility=10 and core=None.
37*61046927SAndroid Build Coastguard Worker
38*61046927SAndroid Build Coastguard Worker    Each of the attributes that is not None must have a valid value.  The
39*61046927SAndroid Build Coastguard Worker    valid ranges are:
40*61046927SAndroid Build Coastguard Worker
41*61046927SAndroid Build Coastguard Worker        compatibility: [10, )
42*61046927SAndroid Build Coastguard Worker        core: [31, )
43*61046927SAndroid Build Coastguard Worker        es1: [10, 11]
44*61046927SAndroid Build Coastguard Worker        es2: [20, )
45*61046927SAndroid Build Coastguard Worker
46*61046927SAndroid Build Coastguard Worker    These ranges are enforced by the constructor.
47*61046927SAndroid Build Coastguard Worker    """
48*61046927SAndroid Build Coastguard Worker    def __init__(self, compatibility=None, core=None, es1=None, es2=None):
49*61046927SAndroid Build Coastguard Worker        if compatibility is not None:
50*61046927SAndroid Build Coastguard Worker            assert isinstance(compatibility, int)
51*61046927SAndroid Build Coastguard Worker            assert compatibility >= 10
52*61046927SAndroid Build Coastguard Worker
53*61046927SAndroid Build Coastguard Worker        if core is not None:
54*61046927SAndroid Build Coastguard Worker            assert isinstance(core, int)
55*61046927SAndroid Build Coastguard Worker            assert core >= 31
56*61046927SAndroid Build Coastguard Worker
57*61046927SAndroid Build Coastguard Worker        if es1 is not None:
58*61046927SAndroid Build Coastguard Worker            assert isinstance(es1, int)
59*61046927SAndroid Build Coastguard Worker            assert es1 == 10 or es1 == 11
60*61046927SAndroid Build Coastguard Worker
61*61046927SAndroid Build Coastguard Worker        if es2 is not None:
62*61046927SAndroid Build Coastguard Worker            assert isinstance(es2, int)
63*61046927SAndroid Build Coastguard Worker            assert es2 >= 20
64*61046927SAndroid Build Coastguard Worker
65*61046927SAndroid Build Coastguard Worker        self.compatibility = compatibility
66*61046927SAndroid Build Coastguard Worker        self.core = core
67*61046927SAndroid Build Coastguard Worker        self.es1 = es1
68*61046927SAndroid Build Coastguard Worker        self.es2 = es2
69*61046927SAndroid Build Coastguard Worker
70*61046927SAndroid Build Coastguard Workerfunctions = {
71*61046927SAndroid Build Coastguard Worker    # OpenGL 3.1 / GL_ARB_texture_buffer_object.
72*61046927SAndroid Build Coastguard Worker    "TexBuffer": exec_info(compatibility=20, core=31, es2=31),
73*61046927SAndroid Build Coastguard Worker
74*61046927SAndroid Build Coastguard Worker    # OpenGL 3.2 / GL_OES_geometry_shader.
75*61046927SAndroid Build Coastguard Worker    "FramebufferTexture": exec_info(compatibility=32, core=32, es2=31),
76*61046927SAndroid Build Coastguard Worker
77*61046927SAndroid Build Coastguard Worker    # OpenGL 4.0 / GL_ARB_shader_subroutines. Mesa only exposes this
78*61046927SAndroid Build Coastguard Worker    # extension with core profile.
79*61046927SAndroid Build Coastguard Worker    "GetSubroutineUniformLocation": exec_info(compatibility=31, core=31),
80*61046927SAndroid Build Coastguard Worker    "GetSubroutineIndex": exec_info(compatibility=31, core=31),
81*61046927SAndroid Build Coastguard Worker    "GetActiveSubroutineUniformiv": exec_info(compatibility=31, core=31),
82*61046927SAndroid Build Coastguard Worker    "GetActiveSubroutineUniformName": exec_info(compatibility=31, core=31),
83*61046927SAndroid Build Coastguard Worker    "GetActiveSubroutineName": exec_info(compatibility=31, core=31),
84*61046927SAndroid Build Coastguard Worker    "UniformSubroutinesuiv": exec_info(compatibility=31, core=31),
85*61046927SAndroid Build Coastguard Worker    "GetUniformSubroutineuiv": exec_info(compatibility=31, core=31),
86*61046927SAndroid Build Coastguard Worker    "GetProgramStageiv": exec_info(compatibility=31, core=31),
87*61046927SAndroid Build Coastguard Worker
88*61046927SAndroid Build Coastguard Worker    # OpenGL 4.0 / GL_ARB_gpu_shader_fp64.  The extension spec says:
89*61046927SAndroid Build Coastguard Worker    #
90*61046927SAndroid Build Coastguard Worker    #     "OpenGL 3.2 and GLSL 1.50 are required."
91*61046927SAndroid Build Coastguard Worker    "Uniform1d": exec_info(compatibility=32, core=32),
92*61046927SAndroid Build Coastguard Worker    "Uniform2d": exec_info(compatibility=32, core=32),
93*61046927SAndroid Build Coastguard Worker    "Uniform3d": exec_info(compatibility=32, core=32),
94*61046927SAndroid Build Coastguard Worker    "Uniform4d": exec_info(compatibility=32, core=32),
95*61046927SAndroid Build Coastguard Worker    "Uniform1dv": exec_info(compatibility=32, core=32),
96*61046927SAndroid Build Coastguard Worker    "Uniform2dv": exec_info(compatibility=32, core=32),
97*61046927SAndroid Build Coastguard Worker    "Uniform3dv": exec_info(compatibility=32, core=32),
98*61046927SAndroid Build Coastguard Worker    "Uniform4dv": exec_info(compatibility=32, core=32),
99*61046927SAndroid Build Coastguard Worker    "UniformMatrix2dv": exec_info(compatibility=32, core=32),
100*61046927SAndroid Build Coastguard Worker    "UniformMatrix3dv": exec_info(compatibility=32, core=32),
101*61046927SAndroid Build Coastguard Worker    "UniformMatrix4dv": exec_info(compatibility=32, core=32),
102*61046927SAndroid Build Coastguard Worker    "UniformMatrix2x3dv": exec_info(compatibility=32,core=32),
103*61046927SAndroid Build Coastguard Worker    "UniformMatrix2x4dv": exec_info(compatibility=32, core=32),
104*61046927SAndroid Build Coastguard Worker    "UniformMatrix3x2dv": exec_info(compatibility=32, core=32),
105*61046927SAndroid Build Coastguard Worker    "UniformMatrix3x4dv": exec_info(compatibility=32, core=32),
106*61046927SAndroid Build Coastguard Worker    "UniformMatrix4x2dv": exec_info(compatibility=32, core=32),
107*61046927SAndroid Build Coastguard Worker    "UniformMatrix4x3dv": exec_info(compatibility=32, core=32),
108*61046927SAndroid Build Coastguard Worker    "GetUniformdv": exec_info(compatibility=32, core=32),
109*61046927SAndroid Build Coastguard Worker
110*61046927SAndroid Build Coastguard Worker    # OpenGL 4.1 / GL_ARB_vertex_attrib_64bit.  The extension spec says:
111*61046927SAndroid Build Coastguard Worker    #
112*61046927SAndroid Build Coastguard Worker    #     "OpenGL 3.0 and GLSL 1.30 are required.
113*61046927SAndroid Build Coastguard Worker    #
114*61046927SAndroid Build Coastguard Worker    #     ARB_gpu_shader_fp64 (or equivalent functionality) is required."
115*61046927SAndroid Build Coastguard Worker    #
116*61046927SAndroid Build Coastguard Worker    # For Mesa this effectively means OpenGL 3.2 is required.  It seems
117*61046927SAndroid Build Coastguard Worker    # unlikely that Mesa will ever get support for any of the NV extensions
118*61046927SAndroid Build Coastguard Worker    # that add "equivalent functionality."
119*61046927SAndroid Build Coastguard Worker    "VertexAttribL1d": exec_info(compatibility=32, core=32),
120*61046927SAndroid Build Coastguard Worker    "VertexAttribL2d": exec_info(compatibility=32, core=32),
121*61046927SAndroid Build Coastguard Worker    "VertexAttribL3d": exec_info(compatibility=32, core=32),
122*61046927SAndroid Build Coastguard Worker    "VertexAttribL4d": exec_info(compatibility=32, core=32),
123*61046927SAndroid Build Coastguard Worker    "VertexAttribL1dv": exec_info(compatibility=32, core=32),
124*61046927SAndroid Build Coastguard Worker    "VertexAttribL2dv": exec_info(compatibility=32, core=32),
125*61046927SAndroid Build Coastguard Worker    "VertexAttribL3dv": exec_info(compatibility=32, core=32),
126*61046927SAndroid Build Coastguard Worker    "VertexAttribL4dv": exec_info(compatibility=32, core=32),
127*61046927SAndroid Build Coastguard Worker    "VertexAttribLPointer": exec_info(compatibility=32, core=32),
128*61046927SAndroid Build Coastguard Worker    "GetVertexAttribLdv": exec_info(compatibility=32, core=32),
129*61046927SAndroid Build Coastguard Worker
130*61046927SAndroid Build Coastguard Worker    # OpenGL 4.1 / GL_ARB_viewport_array.  The extension spec says:
131*61046927SAndroid Build Coastguard Worker    #
132*61046927SAndroid Build Coastguard Worker    #     "OpenGL 3.2 or the EXT_geometry_shader4 or ARB_geometry_shader4
133*61046927SAndroid Build Coastguard Worker    #     extensions are required."
134*61046927SAndroid Build Coastguard Worker    #
135*61046927SAndroid Build Coastguard Worker    # Mesa does not support either of the geometry shader extensions, so
136*61046927SAndroid Build Coastguard Worker    # OpenGL 3.2 is required.
137*61046927SAndroid Build Coastguard Worker    "ViewportArrayv": exec_info(compatibility=32, core=32, es2=31),
138*61046927SAndroid Build Coastguard Worker    "ViewportIndexedf": exec_info(compatibility=32, core=32, es2=31),
139*61046927SAndroid Build Coastguard Worker    "ViewportIndexedfv": exec_info(compatibility=32, core=32, es2=31),
140*61046927SAndroid Build Coastguard Worker    "ScissorArrayv": exec_info(compatibility=32, core=32, es2=31),
141*61046927SAndroid Build Coastguard Worker    "ScissorIndexed": exec_info(compatibility=32, core=32, es2=31),
142*61046927SAndroid Build Coastguard Worker    "ScissorIndexedv": exec_info(compatibility=32, core=32, es2=31),
143*61046927SAndroid Build Coastguard Worker    "DepthRangeArrayv": exec_info(compatibility=32, core=32),
144*61046927SAndroid Build Coastguard Worker    "DepthRangeIndexed": exec_info(compatibility=32, core=32),
145*61046927SAndroid Build Coastguard Worker    # GetFloati_v also GL_ARB_shader_atomic_counters
146*61046927SAndroid Build Coastguard Worker    # GetDoublei_v also GL_ARB_shader_atomic_counters
147*61046927SAndroid Build Coastguard Worker
148*61046927SAndroid Build Coastguard Worker    # OpenGL 4.3 / GL_ARB_texture_buffer_range.
149*61046927SAndroid Build Coastguard Worker    "TexBufferRange": exec_info(compatibility=20, core=31, es2=31),
150*61046927SAndroid Build Coastguard Worker
151*61046927SAndroid Build Coastguard Worker    # OpenGL 4.3 / GL_ARB_framebuffer_no_attachments.  Mesa can expose the
152*61046927SAndroid Build Coastguard Worker    # extension with OpenGL 3.0.
153*61046927SAndroid Build Coastguard Worker    "FramebufferParameteri": exec_info(compatibility=30, core=31, es2=31),
154*61046927SAndroid Build Coastguard Worker    "GetFramebufferParameteriv": exec_info(compatibility=30, core=31, es2=31),
155*61046927SAndroid Build Coastguard Worker
156*61046927SAndroid Build Coastguard Worker    # OpenGL 4.3 / GL_MESA_framebuffer_flip_y.
157*61046927SAndroid Build Coastguard Worker    "FramebufferParameteriMESA": exec_info(core=31, es2=30),
158*61046927SAndroid Build Coastguard Worker    "GetFramebufferParameterivMESA": exec_info(core=31, es2=30),
159*61046927SAndroid Build Coastguard Worker
160*61046927SAndroid Build Coastguard Worker    # OpenGL 4.5 / GL_ARB_direct_state_access.   Mesa can expose the extension
161*61046927SAndroid Build Coastguard Worker    # with core profile.
162*61046927SAndroid Build Coastguard Worker    "CreateTransformFeedbacks": exec_info(compatibility=31, core=31),
163*61046927SAndroid Build Coastguard Worker    "TransformFeedbackBufferBase": exec_info(compatibility=31, core=31),
164*61046927SAndroid Build Coastguard Worker    "TransformFeedbackBufferRange": exec_info(compatibility=31, core=31),
165*61046927SAndroid Build Coastguard Worker    "GetTransformFeedbackiv": exec_info(compatibility=31, core=31),
166*61046927SAndroid Build Coastguard Worker    "GetTransformFeedbacki_v": exec_info(compatibility=31, core=31),
167*61046927SAndroid Build Coastguard Worker    "GetTransformFeedbacki64_v": exec_info(compatibility=31, core=31),
168*61046927SAndroid Build Coastguard Worker    "CreateBuffers": exec_info(compatibility=31, core=31),
169*61046927SAndroid Build Coastguard Worker    "NamedBufferStorage": exec_info(compatibility=31, core=31),
170*61046927SAndroid Build Coastguard Worker    "NamedBufferData": exec_info(compatibility=31, core=31),
171*61046927SAndroid Build Coastguard Worker    "NamedBufferSubData": exec_info(compatibility=31, core=31),
172*61046927SAndroid Build Coastguard Worker    "CopyNamedBufferSubData": exec_info(compatibility=31, core=31),
173*61046927SAndroid Build Coastguard Worker    "ClearNamedBufferData": exec_info(compatibility=31, core=31),
174*61046927SAndroid Build Coastguard Worker    "ClearNamedBufferSubData": exec_info(compatibility=31, core=31),
175*61046927SAndroid Build Coastguard Worker    "MapNamedBuffer": exec_info(compatibility=31, core=31),
176*61046927SAndroid Build Coastguard Worker    "MapNamedBufferRange": exec_info(compatibility=31, core=31),
177*61046927SAndroid Build Coastguard Worker    "UnmapNamedBuffer": exec_info(compatibility=31, core=31),
178*61046927SAndroid Build Coastguard Worker    "FlushMappedNamedBufferRange": exec_info(compatibility=31, core=31),
179*61046927SAndroid Build Coastguard Worker    "GetNamedBufferParameteriv": exec_info(compatibility=31, core=31),
180*61046927SAndroid Build Coastguard Worker    "GetNamedBufferParameteri64v": exec_info(compatibility=31, core=31),
181*61046927SAndroid Build Coastguard Worker    "GetNamedBufferPointerv": exec_info(compatibility=31, core=31),
182*61046927SAndroid Build Coastguard Worker    "GetNamedBufferSubData": exec_info(compatibility=31, core=31),
183*61046927SAndroid Build Coastguard Worker    "CreateFramebuffers": exec_info(compatibility=31, core=31),
184*61046927SAndroid Build Coastguard Worker    "NamedFramebufferRenderbuffer": exec_info(compatibility=31, core=31),
185*61046927SAndroid Build Coastguard Worker    "NamedFramebufferParameteri": exec_info(compatibility=31, core=31),
186*61046927SAndroid Build Coastguard Worker    "NamedFramebufferTexture": exec_info(compatibility=31, core=31),
187*61046927SAndroid Build Coastguard Worker    "NamedFramebufferTextureLayer": exec_info(compatibility=31, core=31),
188*61046927SAndroid Build Coastguard Worker    "NamedFramebufferDrawBuffer": exec_info(compatibility=31, core=31),
189*61046927SAndroid Build Coastguard Worker    "NamedFramebufferDrawBuffers": exec_info(compatibility=31, core=31),
190*61046927SAndroid Build Coastguard Worker    "NamedFramebufferReadBuffer": exec_info(compatibility=31, core=31),
191*61046927SAndroid Build Coastguard Worker    "InvalidateNamedFramebufferData": exec_info(compatibility=31, core=31),
192*61046927SAndroid Build Coastguard Worker    "InvalidateNamedFramebufferSubData": exec_info(compatibility=31, core=31),
193*61046927SAndroid Build Coastguard Worker    "ClearNamedFramebufferiv": exec_info(compatibility=31, core=31),
194*61046927SAndroid Build Coastguard Worker    "ClearNamedFramebufferuiv": exec_info(compatibility=31, core=31),
195*61046927SAndroid Build Coastguard Worker    "ClearNamedFramebufferfv": exec_info(compatibility=31, core=31),
196*61046927SAndroid Build Coastguard Worker    "ClearNamedFramebufferfi": exec_info(compatibility=31, core=31),
197*61046927SAndroid Build Coastguard Worker    "BlitNamedFramebuffer": exec_info(compatibility=31, core=31),
198*61046927SAndroid Build Coastguard Worker    "CheckNamedFramebufferStatus": exec_info(compatibility=31, core=31),
199*61046927SAndroid Build Coastguard Worker    "GetNamedFramebufferParameteriv": exec_info(compatibility=31, core=31),
200*61046927SAndroid Build Coastguard Worker    "GetNamedFramebufferAttachmentParameteriv": exec_info(compatibility=31, core=31),
201*61046927SAndroid Build Coastguard Worker    "CreateRenderbuffers": exec_info(compatibility=31, core=31),
202*61046927SAndroid Build Coastguard Worker    "NamedRenderbufferStorage": exec_info(compatibility=31, core=31),
203*61046927SAndroid Build Coastguard Worker    "NamedRenderbufferStorageMultisample": exec_info(compatibility=31, core=31),
204*61046927SAndroid Build Coastguard Worker    "GetNamedRenderbufferParameteriv": exec_info(compatibility=31, core=31),
205*61046927SAndroid Build Coastguard Worker    "CreateTextures": exec_info(compatibility=31, core=31),
206*61046927SAndroid Build Coastguard Worker    "TextureBuffer": exec_info(compatibility=31, core=31),
207*61046927SAndroid Build Coastguard Worker    "TextureBufferRange": exec_info(compatibility=31, core=31),
208*61046927SAndroid Build Coastguard Worker    "TextureStorage1D": exec_info(compatibility=31, core=31),
209*61046927SAndroid Build Coastguard Worker    "TextureStorage2D": exec_info(compatibility=31, core=31),
210*61046927SAndroid Build Coastguard Worker    "TextureStorage3D": exec_info(compatibility=31, core=31),
211*61046927SAndroid Build Coastguard Worker    "TextureStorage2DMultisample": exec_info(compatibility=31, core=31),
212*61046927SAndroid Build Coastguard Worker    "TextureStorage3DMultisample": exec_info(compatibility=31, core=31),
213*61046927SAndroid Build Coastguard Worker    "TextureSubImage1D": exec_info(compatibility=31, core=31),
214*61046927SAndroid Build Coastguard Worker    "TextureSubImage2D": exec_info(compatibility=31, core=31),
215*61046927SAndroid Build Coastguard Worker    "TextureSubImage3D": exec_info(compatibility=31, core=31),
216*61046927SAndroid Build Coastguard Worker    "CompressedTextureSubImage1D": exec_info(compatibility=31, core=31),
217*61046927SAndroid Build Coastguard Worker    "CompressedTextureSubImage2D": exec_info(compatibility=31, core=31),
218*61046927SAndroid Build Coastguard Worker    "CompressedTextureSubImage3D": exec_info(compatibility=31, core=31),
219*61046927SAndroid Build Coastguard Worker    "CopyTextureSubImage1D": exec_info(compatibility=31, core=31),
220*61046927SAndroid Build Coastguard Worker    "CopyTextureSubImage2D": exec_info(compatibility=31, core=31),
221*61046927SAndroid Build Coastguard Worker    "CopyTextureSubImage3D": exec_info(compatibility=31, core=31),
222*61046927SAndroid Build Coastguard Worker    "TextureParameterf": exec_info(compatibility=31, core=31),
223*61046927SAndroid Build Coastguard Worker    "TextureParameterfv": exec_info(compatibility=31, core=31),
224*61046927SAndroid Build Coastguard Worker    "TextureParameteri": exec_info(compatibility=31, core=31),
225*61046927SAndroid Build Coastguard Worker    "TextureParameterIiv": exec_info(compatibility=31, core=31),
226*61046927SAndroid Build Coastguard Worker    "TextureParameterIuiv": exec_info(compatibility=31, core=31),
227*61046927SAndroid Build Coastguard Worker    "TextureParameteriv": exec_info(compatibility=31, core=31),
228*61046927SAndroid Build Coastguard Worker    "GenerateTextureMipmap": exec_info(compatibility=31, core=31),
229*61046927SAndroid Build Coastguard Worker    "BindTextureUnit": exec_info(compatibility=31, core=31),
230*61046927SAndroid Build Coastguard Worker    "GetTextureImage": exec_info(compatibility=31, core=31),
231*61046927SAndroid Build Coastguard Worker    "GetCompressedTextureImage": exec_info(compatibility=31, core=31),
232*61046927SAndroid Build Coastguard Worker    "GetTextureLevelParameterfv": exec_info(compatibility=31, core=31),
233*61046927SAndroid Build Coastguard Worker    "GetTextureLevelParameteriv": exec_info(compatibility=31, core=31),
234*61046927SAndroid Build Coastguard Worker    "GetTextureParameterfv": exec_info(compatibility=31, core=31),
235*61046927SAndroid Build Coastguard Worker    "GetTextureParameterIiv": exec_info(compatibility=31, core=31),
236*61046927SAndroid Build Coastguard Worker    "GetTextureParameterIuiv": exec_info(compatibility=31, core=31),
237*61046927SAndroid Build Coastguard Worker    "GetTextureParameteriv": exec_info(compatibility=31, core=31),
238*61046927SAndroid Build Coastguard Worker    "CreateVertexArrays": exec_info(compatibility=31, core=31),
239*61046927SAndroid Build Coastguard Worker    "DisableVertexArrayAttrib": exec_info(compatibility=31, core=31),
240*61046927SAndroid Build Coastguard Worker    "EnableVertexArrayAttrib": exec_info(compatibility=31, core=31),
241*61046927SAndroid Build Coastguard Worker    "VertexArrayElementBuffer": exec_info(compatibility=31, core=31),
242*61046927SAndroid Build Coastguard Worker    "VertexArrayVertexBuffer": exec_info(compatibility=31, core=31),
243*61046927SAndroid Build Coastguard Worker    "VertexArrayVertexBuffers": exec_info(compatibility=31, core=31),
244*61046927SAndroid Build Coastguard Worker    "VertexArrayAttribFormat": exec_info(compatibility=31, core=31),
245*61046927SAndroid Build Coastguard Worker    "VertexArrayAttribIFormat": exec_info(compatibility=31, core=31),
246*61046927SAndroid Build Coastguard Worker    "VertexArrayAttribLFormat": exec_info(compatibility=31, core=31),
247*61046927SAndroid Build Coastguard Worker    "VertexArrayAttribBinding": exec_info(compatibility=31, core=31),
248*61046927SAndroid Build Coastguard Worker    "VertexArrayBindingDivisor": exec_info(compatibility=31, core=31),
249*61046927SAndroid Build Coastguard Worker    "GetVertexArrayiv": exec_info(compatibility=31, core=31),
250*61046927SAndroid Build Coastguard Worker    "GetVertexArrayIndexediv": exec_info(compatibility=31, core=31),
251*61046927SAndroid Build Coastguard Worker    "GetVertexArrayIndexed64iv": exec_info(compatibility=31, core=31),
252*61046927SAndroid Build Coastguard Worker    "CreateSamplers": exec_info(compatibility=31, core=31),
253*61046927SAndroid Build Coastguard Worker    "CreateProgramPipelines": exec_info(compatibility=31, core=31),
254*61046927SAndroid Build Coastguard Worker    "CreateQueries": exec_info(compatibility=31, core=31),
255*61046927SAndroid Build Coastguard Worker    "GetQueryBufferObjectiv": exec_info(compatibility=31, core=31),
256*61046927SAndroid Build Coastguard Worker    "GetQueryBufferObjectuiv": exec_info(compatibility=31, core=31),
257*61046927SAndroid Build Coastguard Worker    "GetQueryBufferObjecti64v": exec_info(compatibility=31, core=31),
258*61046927SAndroid Build Coastguard Worker    "GetQueryBufferObjectui64v": exec_info(compatibility=31, core=31),
259*61046927SAndroid Build Coastguard Worker
260*61046927SAndroid Build Coastguard Worker    # GL_ARB_gpu_shader_int64 - nominally requires OpenGL 4.0
261*61046927SAndroid Build Coastguard Worker    "Uniform1i64ARB": exec_info(compatibility=40, core=31),
262*61046927SAndroid Build Coastguard Worker    "Uniform2i64ARB": exec_info(compatibility=40, core=31),
263*61046927SAndroid Build Coastguard Worker    "Uniform3i64ARB": exec_info(compatibility=40, core=31),
264*61046927SAndroid Build Coastguard Worker    "Uniform4i64ARB": exec_info(compatibility=40, core=31),
265*61046927SAndroid Build Coastguard Worker    "Uniform1i64vARB": exec_info(compatibility=40, core=31),
266*61046927SAndroid Build Coastguard Worker    "Uniform2i64vARB": exec_info(compatibility=40, core=31),
267*61046927SAndroid Build Coastguard Worker    "Uniform3i64vARB": exec_info(compatibility=40, core=31),
268*61046927SAndroid Build Coastguard Worker    "Uniform4i64vARB": exec_info(compatibility=40, core=31),
269*61046927SAndroid Build Coastguard Worker    "Uniform1ui64ARB": exec_info(compatibility=40, core=31),
270*61046927SAndroid Build Coastguard Worker    "Uniform2ui64ARB": exec_info(compatibility=40, core=31),
271*61046927SAndroid Build Coastguard Worker    "Uniform3ui64ARB": exec_info(compatibility=40, core=31),
272*61046927SAndroid Build Coastguard Worker    "Uniform4ui64ARB": exec_info(compatibility=40, core=31),
273*61046927SAndroid Build Coastguard Worker    "Uniform1ui64vARB": exec_info(compatibility=40, core=31),
274*61046927SAndroid Build Coastguard Worker    "Uniform2ui64vARB": exec_info(compatibility=40, core=31),
275*61046927SAndroid Build Coastguard Worker    "Uniform3ui64vARB": exec_info(compatibility=40, core=31),
276*61046927SAndroid Build Coastguard Worker    "Uniform4ui64vARB": exec_info(compatibility=40, core=31),
277*61046927SAndroid Build Coastguard Worker    "GetUniformi64vARB": exec_info(compatibility=40, core=31),
278*61046927SAndroid Build Coastguard Worker    "GetUniformui64vARB": exec_info(compatibility=40, core=31),
279*61046927SAndroid Build Coastguard Worker    "GetnUniformi64vARB": exec_info(compatibility=40, core=31),
280*61046927SAndroid Build Coastguard Worker    "GetnUniformui64vARB": exec_info(compatibility=40, core=31),
281*61046927SAndroid Build Coastguard Worker    "ProgramUniform1i64ARB": exec_info(compatibility=40, core=31),
282*61046927SAndroid Build Coastguard Worker    "ProgramUniform2i64ARB": exec_info(compatibility=40, core=31),
283*61046927SAndroid Build Coastguard Worker    "ProgramUniform3i64ARB": exec_info(compatibility=40, core=31),
284*61046927SAndroid Build Coastguard Worker    "ProgramUniform4i64ARB": exec_info(compatibility=40, core=31),
285*61046927SAndroid Build Coastguard Worker    "ProgramUniform1i64vARB": exec_info(compatibility=40, core=31),
286*61046927SAndroid Build Coastguard Worker    "ProgramUniform2i64vARB": exec_info(compatibility=40, core=31),
287*61046927SAndroid Build Coastguard Worker    "ProgramUniform3i64vARB": exec_info(compatibility=40, core=31),
288*61046927SAndroid Build Coastguard Worker    "ProgramUniform4i64vARB": exec_info(compatibility=40, core=31),
289*61046927SAndroid Build Coastguard Worker    "ProgramUniform1ui64ARB": exec_info(compatibility=40, core=31),
290*61046927SAndroid Build Coastguard Worker    "ProgramUniform2ui64ARB": exec_info(compatibility=40, core=31),
291*61046927SAndroid Build Coastguard Worker    "ProgramUniform3ui64ARB": exec_info(compatibility=40, core=31),
292*61046927SAndroid Build Coastguard Worker    "ProgramUniform4ui64ARB": exec_info(compatibility=40, core=31),
293*61046927SAndroid Build Coastguard Worker    "ProgramUniform1ui64vARB": exec_info(compatibility=40, core=31),
294*61046927SAndroid Build Coastguard Worker    "ProgramUniform2ui64vARB": exec_info(compatibility=40, core=31),
295*61046927SAndroid Build Coastguard Worker    "ProgramUniform3ui64vARB": exec_info(compatibility=40, core=31),
296*61046927SAndroid Build Coastguard Worker    "ProgramUniform4ui64vARB": exec_info(compatibility=40, core=31),
297*61046927SAndroid Build Coastguard Worker
298*61046927SAndroid Build Coastguard Worker    # GL_ARB_bindless_texture
299*61046927SAndroid Build Coastguard Worker    "GetVertexAttribLui64vARB": exec_info(compatibility=30, core=31),
300*61046927SAndroid Build Coastguard Worker}
301*61046927SAndroid Build Coastguard Worker
302*61046927SAndroid Build Coastguard Workerdef get_api_condition(f):
303*61046927SAndroid Build Coastguard Worker    condition_parts = []
304*61046927SAndroid Build Coastguard Worker    if f.name in functions:
305*61046927SAndroid Build Coastguard Worker        ex = functions[f.name]
306*61046927SAndroid Build Coastguard Worker        unconditional_count = 0
307*61046927SAndroid Build Coastguard Worker
308*61046927SAndroid Build Coastguard Worker        if ex.compatibility is not None:
309*61046927SAndroid Build Coastguard Worker            condition_parts.append('_mesa_is_desktop_gl_compat(ctx)')
310*61046927SAndroid Build Coastguard Worker            unconditional_count += 1
311*61046927SAndroid Build Coastguard Worker
312*61046927SAndroid Build Coastguard Worker        if ex.core is not None:
313*61046927SAndroid Build Coastguard Worker            condition_parts.append('_mesa_is_desktop_gl_core(ctx)')
314*61046927SAndroid Build Coastguard Worker            unconditional_count += 1
315*61046927SAndroid Build Coastguard Worker
316*61046927SAndroid Build Coastguard Worker        if ex.es1 is not None:
317*61046927SAndroid Build Coastguard Worker            condition_parts.append('_mesa_is_gles1(ctx)')
318*61046927SAndroid Build Coastguard Worker            unconditional_count += 1
319*61046927SAndroid Build Coastguard Worker
320*61046927SAndroid Build Coastguard Worker        if ex.es2 is not None:
321*61046927SAndroid Build Coastguard Worker            if ex.es2 > 20:
322*61046927SAndroid Build Coastguard Worker                condition_parts.append('(_mesa_is_gles2(ctx) && ctx->Version >= {0})'.format(ex.es2))
323*61046927SAndroid Build Coastguard Worker            else:
324*61046927SAndroid Build Coastguard Worker                condition_parts.append('_mesa_is_gles2(ctx)')
325*61046927SAndroid Build Coastguard Worker                unconditional_count += 1
326*61046927SAndroid Build Coastguard Worker
327*61046927SAndroid Build Coastguard Worker        # If the function is unconditionally available in all four
328*61046927SAndroid Build Coastguard Worker        # APIs, then it is always available.  Replace the complex
329*61046927SAndroid Build Coastguard Worker        # tautology condition with "true" and let GCC do the right
330*61046927SAndroid Build Coastguard Worker        # thing.
331*61046927SAndroid Build Coastguard Worker        if unconditional_count == 4:
332*61046927SAndroid Build Coastguard Worker            condition_parts = ['true']
333*61046927SAndroid Build Coastguard Worker    else:
334*61046927SAndroid Build Coastguard Worker        if f.desktop:
335*61046927SAndroid Build Coastguard Worker            if f.deprecated:
336*61046927SAndroid Build Coastguard Worker                condition_parts.append('_mesa_is_desktop_gl_compat(ctx)')
337*61046927SAndroid Build Coastguard Worker            else:
338*61046927SAndroid Build Coastguard Worker                condition_parts.append('_mesa_is_desktop_gl(ctx)')
339*61046927SAndroid Build Coastguard Worker        if 'es1' in f.api_map:
340*61046927SAndroid Build Coastguard Worker            condition_parts.append('_mesa_is_gles1(ctx)')
341*61046927SAndroid Build Coastguard Worker        if 'es2' in f.api_map:
342*61046927SAndroid Build Coastguard Worker            if f.api_map['es2'] > 2.0:
343*61046927SAndroid Build Coastguard Worker                condition_parts.append('(_mesa_is_gles2(ctx) && ctx->Version >= {0})'.format(int(f.api_map['es2'] * 10)))
344*61046927SAndroid Build Coastguard Worker            else:
345*61046927SAndroid Build Coastguard Worker                condition_parts.append('_mesa_is_gles2(ctx)')
346*61046927SAndroid Build Coastguard Worker
347*61046927SAndroid Build Coastguard Worker    if not condition_parts:
348*61046927SAndroid Build Coastguard Worker        # This function does not exist in any API.
349*61046927SAndroid Build Coastguard Worker        return None
350*61046927SAndroid Build Coastguard Worker    return ' || '.join(condition_parts)
351*61046927SAndroid Build Coastguard Worker
352*61046927SAndroid Build Coastguard Workerdef print_glapi_file(printer):
353*61046927SAndroid Build Coastguard Worker    parser = argparse.ArgumentParser()
354*61046927SAndroid Build Coastguard Worker    parser.add_argument('-f',
355*61046927SAndroid Build Coastguard Worker                        dest='filename',
356*61046927SAndroid Build Coastguard Worker                        default='gl_and_es_API.xml',
357*61046927SAndroid Build Coastguard Worker                        help='an xml file describing an API')
358*61046927SAndroid Build Coastguard Worker    args = parser.parse_args()
359*61046927SAndroid Build Coastguard Worker    api = gl_XML.parse_GL_API(args.filename)
360*61046927SAndroid Build Coastguard Worker    printer.Print(api)
361